我想拦截当前页面之前发生的任何回发。我想在回发服务之前做一些自定义操作。任何想法如何做到这一点?
答案 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)
{
}