这可能真的很骇客,但我开始变得绝望了
是否可以阻止请求实际访问实际页面...即,我可以在Application_BeginRequest中编写一些处理我想要的部分的内容,然后跳过生命周期的其余部分吗?
哦,是否有可能以ajax更新面板确实合适的方式执行此操作(返回一些默认内容,说“我没有做任何抱歉”)
好的,疯狂的问题。
答案 0 :(得分:2)
您可以阻止代码的部分在部分页面更新期间执行,如下所示:
if (! ScriptManager.IsInAsyncPostBack) {
// Code in here won't happen during UpdatePanel actions
}
UpdatePanels按设计执行大部分ASP.NET页面生命周期。如果您中止该过程(例如,通过Response.End()
),请求将无法完成,因此客户端将无法获取更新页面HTML所需的数据。
在UpdatePanel中触发服务器端方法时,ASP.NET会执行以下操作:
(有关详情,请参阅my recent answer to this question,有关详情,请参阅UpdatePanel Control Overview或this article
UpdatePanel AJAX实现有几种替代方案,不涉及整个页面生命周期。其中最受欢迎的是Using jQuery to directly call ASP.NET AJAX page methods。
使用jQuery进行AJAX调用让你更接近金属(可以这么说)而不是UpdatePanels,但是有很多很好的帮助让你开始 - 在StackOverflow本身和Encosia上(它的来源)最后一个链接)。
答案 1 :(得分:1)
考虑编写一个位于请求处理流程前面的HTTPModule来处理这个问题。
答案 2 :(得分:0)
当然,只需调用Response.End():
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Url.AbsolutePath.Equals("/PageYouWantToSuppress.aspx", StringComparison.OrdinalIgnoreCase))
{
// Do your stuff
Response.End();
}
}
ETA:我不确定你问题的UpdatePanel部分。