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

NLV*_*NLV 11 c# asp.net postback

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

wom*_*omp 21

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

__doPostBack函数如下所示:

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

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

<form id="form1" runat="server" onsubmit="return myFunction()">
Run Code Online (Sandbox Code Playgroud)

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

var __original= __doPostBack;
__doPostBack = myFunction();
Run Code Online (Sandbox Code Playgroud)

这会将__doPostBack函数替换为您自己的函数,您可以从新函数中调用原始函数.


Bey*_*ygi 6

使用以下选项

所有选项都适用于启用了ajax的表单和简单表单.
返回false以取消任何提交处理程序中的提交.

Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "submit-handler", "alert(\"On PostBack\");");
Run Code Online (Sandbox Code Playgroud)

等价的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>
Run Code Online (Sandbox Code Playgroud)

如果您想完全控制__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>
Run Code Online (Sandbox Code Playgroud)

使用ASP.NET 4.0进行测试