如何在代码隐藏中获取回发参数值

时间:2013-11-25 08:32:05

标签: c# asp.net

我在aspx页面中触发了一个回发事件,如下所示:

__doPostBack('AddNewEmployeeType', "empl", "sick");

代码背后:

string val = Request.Params.Get("__EVENTTARGET");

通过上面的代码,我只能得到一个第一个值,但我的目的是得到所有三个参数值。我怎样才能做到这一点?

3 个答案:

答案 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