我的自定义控件中包含一个下拉框,想要达的目的是:选择了下拉框的某一个值后,自定义控件就能知道这个值是什么protected override void Render(HtmlTextWriter writer)
{
   base.Render(writer);
   string str = string.Format("<select id='select" + this.ID + "' onchange='{0}'><option>6</option><option>12</option><option>24</option><option>36</option></select>", Page.ClientScript.GetPostBackEventReference(this, "?"));
   writer.Write(str);
 }上面红色问号的部分该怎么写,才可以让这个自定义控件知道下拉框选择的值?
谢 谢

解决方案 »

  1.   

    你要在脚本里把选中的值放在viewstate里,这样postback后从viewstate里找
      

  2.   

    protected override void Render(HtmlTextWriter writer)
    {
    Page.ClientScript.RegisterClientScriptBlock(GetType(), "", " function postback(var id,var slid){__doPostBack(id,document.getElementById(slid).value);}", true);
       base.Render(writer);
       string str = string.Format("<select id='select" + this.ID + "' onchange='{0}'><option>6</option><option>12</option><option>24</option><option>36</option></select>","postback("+this.ClientId+",select"+this.ID+")");
       writer.Write(str);
     }
      

  3.   

    如何在select的onchange中把选择的值赋给viewstate呢?因为onchange毕竟是javascript。
    求明示。
      

  4.   


    //这个
    "<select onchange=\"javascript:__doPostBack('" + this.UniqueID + "',this.value)\">";
    //或这个
    "javascript:" + this.Page.ClientScript.GetPostBackEventReference(this, "this.value");http://download.csdn.net/source/2560452
    这是个分页的自定义控件,有下拉框实现回发,可以参考下。
      

  5.   

    直接写 this.value 就可以了
      

  6.   

    我写"<select onchange=\"javascript:__doPostBack('" + this.UniqueID + "',this.value)\">";它给我提示说:__doPostBack那个地方找不到控件,即使我加了个id也一样;
    我写"javascript:" + this.Page.ClientScript.GetPostBackEventReference(this, "this.value");,选择之后它给的值是“this.value”字符串,而不是下拉框值
      

  7.   

    照做了,结果得到的是“this.value”字符串而不是下拉框的值。我的问题出在哪里?
      

  8.   

    那可能是引号的问题,吧this.value 当字符串了你现在怎么写的
      

  9.   

    我现在是这样写的:protected override void Render(HtmlTextWriter writer)
    {
       base.Render(writer);
       string str = string.Format("<select id='select" + this.ID + "' onchange='{0}'><option>6</option><option>12</option><option>24</option><option>36</option></select>", Page.ClientScript.GetPostBackEventReference(this, "this.value"));
       writer.Write(str);
     }我还记得以前非哥你还帮我解决过FTP的问题
      

  10.   

    string onchangeJs = Page.ClientScript.GetPostBackEventReference(this, "").Replace("''", "this.value");        string str = string.Format("<select id='select" + this.ID + "' onchange={0}><option>6</option><option>12</option><option>24</option><option>36</option></select>", onchangeJs);
      

  11.   

    因为 GetPostBackEventReference 生成的 js 函数中 第二个参数的位置带引号而实际则是要使用this 去获取相关的值,不能有引号。那把引号替换掉就可以了。