0

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

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

我应该能够在部分回发期间获取 html 控件的值吗?还是仅使用 runat="server" 进行控制?

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

4

2 回答 2

0

更新面板不是一种有效的异步方式。

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

Request.Form 是从视图状态构建的,您的控件不会被添加到其中。

于 2011-02-12T08:56:09.803 回答
0

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

记住参数

__doPostback(string controlId,string param)

是字符串,而 ASP.net 方法

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

返回字符串。

因此,简单的答案是

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

  2. 将该对象字符串化,并将其作为 __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);
}
于 2016-06-13T05:47:01.123 回答