JavaScript:__ doPostBack中的多个参数

Gun*_*nar 13 javascript asp.net postback

首先,我发现这个唯一的帖子(调用多个dopostback-from-javascript)对我的问题没有帮助,所以我不相信这篇文章是重复的.

我在我的ASPX网页中有这个JavaScript函数,它包含一个__doPostBack函数:

function OpenSubTable(bolID, controlID) {
  // code
  __doPostBack('UpdatePanelSearch', bolID);
  // more code
}
Run Code Online (Sandbox Code Playgroud)

工作得很好,我可以将bolID的值放到我的代码后面,如下所示:

protected void UpdatePanelSearch_Load(object sender, EventArgs e)
{
  var bolID = Request["__EVENTARGUMENT"];
  // code
}
Run Code Online (Sandbox Code Playgroud)

问题是,我必须通过回发传递2个不同的值.这有什么简单的解决方案吗?显然这样的事情不起作用:

function OpenSubTable(bolID, controlID) {
  // code
  __doPostBack('UpdatePanelSearch', bolID, controlID); // not that simple, i'm afraid :(
  // more code
}
Run Code Online (Sandbox Code Playgroud)

任何帮助都是最受欢迎的.

此致,Gunnar

jba*_*bey 13

您可以将这两个值作为一个JSON字符串传递:

function OpenSubTable(bolID, controlID) {
  __doPostBack('UpdatePanelSearch', JSON.stringify({ bolID: bolID, controlID: controlID}));
}
Run Code Online (Sandbox Code Playgroud)

然后在服务器上解析它:

protected void UpdatePanelSearch_Load(object sender, EventArgs e)
{
  SomeDTO deserializedArgs = 
      JsonConvert.DeserializeObject<SomeDTO>(Request["__EVENTARGUMENT"]);
  var bolID = deserializedArgs.bolID;
  var controlID = deserializedArgs.controlID;
}

public class SomeDTO
{
    public string bolID { get; set; }
    public string controlID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用.Net> = 4.0,我相信您可以反序列化为通用的操作并避免必须创建SomeDTO.编辑:有关反序列化为动态类型的详细信息.