我正在使用 jQuery 将一些非服务器控件(纯 html 控件)动态插入到更新面板中。
如果我进行完整回发,我可以使用 Request.Form 获取这些控件的值,但是如果我进行部分回发,则不能。
我应该能够在部分回发期间获取 html 控件的值吗?还是仅使用 runat="server" 进行控制?
我正在使用非服务器控件,因为我正在使用 facebox 和文件上传控件...它不漂亮:-|
我正在使用 jQuery 将一些非服务器控件(纯 html 控件)动态插入到更新面板中。
如果我进行完整回发,我可以使用 Request.Form 获取这些控件的值,但是如果我进行部分回发,则不能。
我应该能够在部分回发期间获取 html 控件的值吗?还是仅使用 runat="server" 进行控制?
我正在使用非服务器控件,因为我正在使用 facebox 和文件上传控件...它不漂亮:-|
更新面板不是一种有效的异步方式。
由于您已经在使用 jQuery,因此向您的项目添加一个 Web 服务 (.asmx) 并点击它。见本文图 4 附近:http: //msdn.microsoft.com/en-us/magazine/cc163413.aspx
Request.Form 是从视图状态构建的,您的控件不会被添加到其中。
您可以在部分回发中获取所需的任何表单控件或控件的所有值。这是一个微不足道的答案,但乍一看并不直观。也许这就是 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);
}