16

首先,我发现的唯一一篇文章(calling-multiple-dopostback-from-javascript)对我的问题没有帮助,所以我不相信这篇文章是重复的。

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

function OpenSubTable(bolID, controlID) {
  // code
  __doPostBack('UpdatePanelSearch', bolID);
  // more code
}

完美运行,我可以像这样将 bolID 的值放入我的代码中:

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

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

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

任何帮助都将受到欢迎。

问候,贡纳尔

4

3 回答 3

14

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

function OpenSubTable(bolID, controlID) {
  __doPostBack('UpdatePanelSearch', JSON.stringify({ bolID: bolID, controlID: controlID}));
}

然后在服务器上解析:

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; }
}

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

于 2013-01-23T15:22:44.977 回答
3

考虑将您的数据放在服务器端隐藏字段中,然后在回发后读取该数据。

<asp:HiddenField id="Data1HiddenField" runat="server" />
<asp:HiddenField id="Data2HiddenField" runat="server" />

您的客户端脚本应包含 ClientID 值以处理服务器端命名容器修改。使用语法(表达式生成器)需要在文件<%= expression %>中维护您的脚本(或至少脚本的这一部分) 。.aspx如果您在外部文件中维护您的 JavaScript,您可以“注册”一个简单的函数,该函数由您的主 JavaScript 调用以移动数据并将该函数与所需的ClientIDs. 见ClientScriptManager.RegisterClientScriptBlock()

var data1 = "data value 1";
var data2 = "data value 2";
$("#<%= Data1HiddenField.ClientID %>").val(data1);
$("#<%= Data2HiddenField.ClientID %>").val(data2);

您的服务器端代码如下所示:

string data1 = Data1HiddenField.Value;
string data2 = Data2HiddenField.Value;

当然还有其他技术可以传递多个数据值,但我发现这既简单又易于维护。如果需要,您可以传递各种数据并使用 JSON 对其进行编码。

于 2013-01-23T15:48:46.683 回答
2

我之前通过构建和拆分字符串使用了多个参数。

例如

string args = String.Format("{0};{1}", bolID, ControlID);

然后,您可以将其传递给回发的参数,并且在检查回发参数时,只需根据您的操作字符拆分字符串(在本例中为“;”)

于 2013-01-23T15:19:24.640 回答