我在aspx页面中触发了一个回发事件,如下所示:
__doPostBack('AddNewEmployeeType', "empl", "sick");
代码背后:
string val = Request.Params.Get("__EVENTTARGET");
通过上面的代码,我只能得到一个第一个值,但我的目的是得到所有三个参数值。我怎样才能做到这一点?
答案 0 :(得分:3)
使用__EVENTARGUMENT
:
string parameter = Request["__EVENTARGUMENT"];
string val = Request.Params.Get("__EVENTTARGET"); // AddNewEmployeeType
Here's a tutorial: Understanding the JavaScript __doPostBack Function
如果需要将多个参数传递回代码隐藏,则需要自己用分隔符将其拆分。例如,您可以使用管道|
:
__doPostBack('AddNewEmployeeType', "empl|sick");
和代码隐藏:
string parameter = Request["__EVENTARGUMENT"];
string[] allParams = parameter.Split('|');
答案 1 :(得分:0)
您对__doPostBack的调用在技术上是不正确的。如果检查ASP.NET页面的源代码,您将看到函数:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
注意它只有2个参数。如果需要传递更多值,则需要将它们填充到eventArgument参数中。
如何执行此操作取决于您 - 使用以逗号分隔的列表或JSON或适合您的任何内容,并在服务器上解析此值(通过访问Request["__EVENTARGUMENT"]
)。
答案 2 :(得分:0)
不应该像这样处理回发。如果控件正在引发回发,并且如果它是用户控件,则应该实现IPostBackDataHandler
。并且你应该为它分配EventHandler
,即使它是自定义的。
https://msdn.microsoft.com/pt-br/library/system.web.ui.ipostbackdatahandler(v=vs.110).aspx