我正在使用jQuery将一些非服务器控件(普通html控件)动态插入到更新面板中。
如果我进行完整的回发,我可以使用Request.Form获取这些控件的值,但是如果我进行部分回发,我不能。
我应该能够在部分回发期间获取html控件的值吗?或者只有runat =“server”的控件?
我正在使用非服务器控件,因为我正在使用facebox和文件上传控件...它不漂亮: - |
答案 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
返回字符串。
因此,简单的答案是
构造一个javascript对象,其中包含您希望在部分中发回的所有表单元素的键值对。
对该对象进行字符串化,并将其作为__doPostBack调用的第二个参数传递。
在服务器端,您只需撤消此过程即可提取您关注的对象和所有表单值。
例如:
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);
}