通过客户端脚本向服务器端控件增加值,如在客户端向服务器端控件DropDownList增加Items,怎样在PostBack后保存增加后的值?

解决方案 »

  1.   

    是保存选中的值,还是保存增加的Items
      

  2.   

    如果是保存选中的值,
    打开页面执行后的html源码,
    找到此DropDownList服务器控件客户端的ID号,
    在服务器端用Request["服务器控件客户端的ID号"]接收
      

  3.   

    这要看你是如果增加值。如果你修改options,毫无作用,根本不会传递到服务器端。你可以使用一个 HiddenField,然后在客户端把options的变动存入这个字段(组合成字符串),然后在服务器端解析这个字符串来更新DropDownList。
      

  4.   

    to sp1234(自然界是没有正邪之分的,全是人的伎俩。) :
        这样很麻烦,看还有其它好方法没
      

  5.   

    “找到此DropDownList服务器控件客户端的ID号”这样去凑ClientID的方法不可靠。ClientID每一次都可能不同。如果你恰巧暂时发现它们一样,那是因为你刚开始写这个页面,太简单了。随着你修改页面、移动位置、绑定控件、自己创建其它动态控件....用眼睛去看某一次输出的ClientID并且硬编码进程序,也太诋毁asp.net的功能了。“在服务器端用Request["服务器控件客户端的ID号"]接收”,一定要先了解接收到的资料的内容之后再说。
      

  6.   

    前台:
    var o = new Option();
    o.innerText = "A";
    o.value = "1";
    Form1.DropDownList1.appendChild(o);

    o = new Option();
    o.innerText = "B";
    o.value = "2";
    Form1.DropDownList1.appendChild(o);
     

    SaveValue();function SaveValue()
    {
    var str = "";
    for(var i=0;i<Form1.DropDownList1.options.length;i++)
    {
    var o = Form1.DropDownList1.options[i];
    str += o.innerText +","+o.value+"|";
    }

    Form1.Hidden1.value  =str;
    }
    后台:
    if(this.IsPostBack)
    {
    string sValue = this.Hidden1.Value.Trim();
    string[] ary = sValue.Split('|');
    this.DropDownList1.Items.Clear();
    for(int i=0;i<ary.Length;i++)
    {
    if(ary[i].Split(',').Length!=2)
    continue;
    this.DropDownList1.Items.Add(new ListItem(ary[i].Split(',')[0],ary[i].Split(',')[1]));
    }