如何拦截页面中的任何回发? - ASP.NET

时间:2010-02-10 05:08:13

标签: c# asp.net postback

我想拦截当前页面之前发生的任何回发。我想在回发服务之前做一些自定义操作。任何想法如何做到这一点?

6 个答案:

答案 0 :(得分:21)

您可以采取一些措施来拦截客户端上的回发。

__doPostBack函数如下所示:

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

请注意,在实际进行回发之前,它会调用“theForm.onsubmit()”。这意味着如果您为表单分配一个onsubmit javascript函数,它将始终在每次回发之前调用。

<form id="form1" runat="server" onsubmit="return myFunction()">

或者,您实际上可以覆盖__doPostBack函数并将其替换为您自己的函数。这是一个在ASP.Net 1.0天内使用的旧技巧。

var __original= __doPostBack;
__doPostBack = myFunction();

这会将__doPostBack功能替换为您自己的功能,您可以从新功能中调用原始功能。

答案 1 :(得分:6)

使用以下选项

  

所有选项都适用   ajax-enabled-forms和简单形式。
  返回false以取消提交   任何提交处理程序。

Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "submit-handler", "alert(\"On PostBack\");");

等效的javascript - 不要将此代码同时用于以前的代码

// Modify your form tag like this
<form onsubmit="javascript:return submit_handler();" ...>

// Add this script tag within head tag
<script type="text/javascript">
    function submit_handler() {
        // your javascript codes
        // return false to cancel
        return true; // it's really important to return true if you don't want to cancel
    }
</script>

如果您想完全控制__doPostBack,请将此脚本放在表单标记

旁边
<script type="text/javascript">
    var default__doPostBack;
    default__doPostBack = __doPostBack;
    __doPostBack = function (eventTarget, eventArgument) {
        // your javascript codes
        alert('Bye __doPostBack');
        default__doPostBack.call(this, eventTarget, eventArgument);
    }
</script>

使用ASP.NET 4.0进行测试

答案 2 :(得分:2)

要在页面执行之前获取回发,您可以创建HttpHandler并实现ProcessRequest函数。

查看this Scott Hanselman link有关如何操作的好博客文章(包括示例代码)。

答案 3 :(得分:1)

Page.IsPostBack是你的朋友。

答案 4 :(得分:1)

您可以在表单的某个页面事件中检查回发。

如果你想在回发上做一些涉及创建控件或操纵viewstate的操作,那么你可能想要参加像Page_Init这样的早期事件。

试试这个:

protected void Page_Init(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            //Check for your conditions here, 

            if (Page.IsAsync)
            {
                //also you may want to handle Async callbacks too:
            }
        }
    }

答案 5 :(得分:0)

不确定,但我认为你在寻找..

if (Page.IsPostBack)
    { 
    }
相关问题