首先,我发现的唯一帖子(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
}
欢迎任何帮助。
此致 贡纳尔
答案 0 :(得分:13)
您可以将这两个值作为一个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&gt; = 4.0,我相信你可以反序列化为通用的touple并避免创建SomeDTO
。修改:More information about deserializing to dynamic types。
答案 1 :(得分: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对其进行编码。
答案 2 :(得分:2)
我之前通过构建和拆分字符串使用了多个参数。
例如
string args = String.Format("{0};{1}", bolID, ControlID);
然后您可以将此传递给回发的参数,并且在检查回发参数时,只需根据您的speration字符拆分字符串(在本例中为';')