非服务器控件和部分回发

时间:2011-02-12 08:49:50

标签: jquery asp.net dynamic updatepanel partial-postback

我正在使用jQuery将一些非服务器控件(普通html控件)动态插入到更新面板中。

如果我进行完整的回发,我可以使用Request.Form获取这些控件的值,但是如果我进行部分回发,我不能。

我应该能够在部分回发期间获取html控件的值吗?或者只有runat =“server”的控件?

我正在使用非服务器控件,因为我正在使用facebox和文件上传控件...它不漂亮: - |

2 个答案:

答案 0 :(得分:0)

更新面板不是执行异步的有效方法。

由于您已经在使用jQuery,请向您的项目添加一个Web服务(.asmx)并点击它。请参见本文附近的图4:http://msdn.microsoft.com/en-us/magazine/cc163413.aspx

Request.Form是从viewstate构建的,你的控件不会被添加到。

答案 1 :(得分:0)

您可以在部分回发中获取所需的任何表单控件或控件的所有值。这是一个微不足道的答案,但乍一看并不直观。也许这就是为什么ASP.net死了。

请记住

的参数
__doPostback(string controlId,string param)

是字符串,ASP.net方法

Request.Params.Get("__EVENTTARGET"); // id
Request.Params.Get("__EVENTTARGET"); // parameter

返回字符串。

因此,简单的答案是

  1. 构造一个javascript对象,其中包含您希望在部分中发回的所有表单元素的键值对。

  2. 对该对象进行字符串化,并将其作为__doPostBack调用的第二个参数传递。

  3. 在服务器端,您只需撤消此过程即可提取您关注的对象和所有表单值。

    例如:

    var strigifiedObject = JSON.stringify(myFormObject);
    var id = "partialPostback";
    __doPostBack(id, strigifiedObject);
    

    ......同时在服务器端

    string id = Request.Params.Get("__EVENTTARGET");
    string param = Request.Params.Get("__EVENTARGUMENT");
    
    if (id == "partialPostback") {
        List<MyObj> formVals = new JavaScriptSerializer().Deserialize<List<MyObj>>>(param);
    }