在C#asp.net中,是否可以通过一个方法中途发回一个有效的网页?

在C#asp.net中,是否可以通过一个方法中途发回一个有效的网页?,c#,ajax,asp.net-2.0,C#,Ajax,Asp.net 2.0,当我想将失去会话状态的用户重定向回StartPage时,我会找到响应。重定向(~/StartPage.aspx)会导致错误“无法在页面回调中调用响应重定向”。因此,在Page.IsCallback情况下,我想添加javascript来执行重定向-这很有效-请参阅下面的代码 protected void ForceBackToStartPage() { if (Page.IsCallback) { string fullLoginUrl = ConvertRelat

当我想将失去会话状态的用户重定向回StartPage时,我会找到响应。重定向(~/StartPage.aspx)会导致错误“无法在页面回调中调用响应重定向”。因此,在Page.IsCallback情况下,我想添加javascript来执行重定向-这很有效-请参阅下面的代码

protected void ForceBackToStartPage()
{
    if (Page.IsCallback)
    {
        string fullLoginUrl = ConvertRelativeUrlToAbsoluteUrl( "~/StartPage.aspx" );
        string script = string.Format("window.location.href = '{0}';", fullLoginUrl);
        ClientScriptManager cm = Page.ClientScript;
        cm.RegisterClientScriptBlock(GetType(), "redirect", script, true);
        //Response.Flush();
        //Response.End();
    }
    else
    {
        Response.Redirect("~/StartPage.aspx");
    }

}
在我将javascript添加到这一部分后,代码继续正常处理,离开此函数,转到网页的其他处理部分-可能是因为用户没有会话数据。理想情况下,我希望完成对该网页的处理,并使该网页以有效状态返回,从而重定向用户

这可能吗

我想回答一下;Response.End();也许可以做到这一点——但发送回浏览器的网页会导致XML解析错误

进一步信息:我在一些地方检查丢失的会话数据(取决于网页-此代码在许多网页中)-例如,PageLoad和一些submit按钮方法

在使用新方法之前,我使用了此代码,例如:

protected void Page_Load(object sender, EventArgs e)
{
    if ((string)Session["OK"] != "OK")
    {
        // the session has timed out - take them back to the start page
        Response.Redirect("~/StartPage.aspx");
    }

...rest of processing
现在它被这样调用:

protected void Page_Load(object sender, EventArgs e)
{
    if ((string)Session["OK"] != "OK")
    {
        // the session has timed out - take them back to the start page
        ForceBackToStartPage();
    }

...rest of processing
所以我显然可以用

否则 { …处理的其余部分 }


但我希望不必这样做,因为SVN源代码管理认为这意味着我已经重新编写了整个“剩余处理”部分。这是有问题的,因为当我从一个分支合并到主干中时,它不会检查我没有覆盖mods,因为它假定所有新代码都将进入

Response.Redirect发出“302 Moved”命令,该命令无法异步提供。假设您只是在IsCallback=true时注册脚本,那么在IsCallback=false时是否也可以注册脚本?注册一个脚本,将事件连接到窗口的已加载事件,并从脚本而不是从服务器重定向页面。

最近我再次考虑了这个问题,并意识到了非常明显的答案。忘记结构良好的代码,因为它是错误陷阱的一部分,这是一个特例,使用返回调用“ForceBackToStartPage”方法后:

protected void Page_Load(object sender, EventArgs e)
{    
 if ((string)Session["OK"] != "OK")  
   {        
       // the session has timed out - take them back to the start page    
       ForceBackToStartPage();  
       return; 
   }  

...rest of processing

}

这是当IsCallback=true时脚本的注册给我带来的问题(IsCallback=false的代码可以工作,因为我没有得到响应。重定向错误),因为我希望能够中断处理并在此时发送有效页面。当处理退出“ForceBackToStartPage”时,它将继续并对页面进行正常处理-根据涉及的网页,由于没有可用的会话数据,它会遇到错误。。。这看起来像是事件日志中的一个bug——理想情况下,这段代码无论如何都不应该执行。