【问题标题】:How to get a post back parameter value in code-behind如何在代码隐藏中获取回发参数值
【发布时间】:2013-11-25 08:32:04
【问题描述】:

我正在触发 aspx 页面中的回发事件,如下所示:

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

后面的代码:

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

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    使用__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('|');
    

    【讨论】:

    • 我仍然只能得到一个参数。问题未解决。
    • Request["__EVENTARGUMENT"] 以“未定义”的形式出现
    • __doPostBack 函数仅使用一个参数调用时,__EVENTARGUMENT 中的值可能类似于“未定义”。这取决于浏览器。当请求不需要数据时,我建议发送一个空字符串作为第二个参数。
    【解决方案2】:

    您对 __doPostBack 的调用在技术上不正确。如果您检查 ASP.NET 页面的源代码,您将看到该函数:

    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    }
    

    注意它只有两个参数。如果需要传递更多的值,则需要将它们填充到 eventArgument 参数中。

    您如何执行此操作取决于您 - 使用逗号分隔的列表、JSON 或任何适合您的方式,并在服务器上解析该值(通过访问 Request["__EVENTARGUMENT"])。

    【讨论】:

      【解决方案3】:

      替代方案

      回发不应该这样处理。如果一个控件正在引发回发,并且它是一个用户控件,它应该实现IPostBackDataHandler。你应该给它分配一个EventHandler,即使它是一个自定义的。


      参考文献

      https://msdn.microsoft.com/pt-br/library/system.web.ui.ipostbackdatahandler(v=vs.110).aspx

      【讨论】:

        猜你喜欢
        • 2012-11-16
        • 2014-04-10
        • 2015-11-06
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 2019-01-30
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多