所以这是该方案:如何使用Response.AddHeader(“refresh”,“seconds”)创建server.transfer()并且不会收到404错误?
我对所有的登录控制页面的基类:
public class SessionControlledPage : Page
{
protected virtual void Page_Load(Object sender, EventArgs e)
{
Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
if (Session.IsNewSession)
{
Response.Redirect("~/login.aspx");
}
}
}
而一个regularpage.aspx
页,从基类inherints:
public partial class RegularPage : SessionControlledPage
{
override protected void Page_Load(Object sender, EventArgs e)
{
base.Page_Load(sender, e);
Server.Transfer("~/otherpage.aspx");
}
}
现在我们假设原始网址为http://localhost/regularpage.aspx,而Session.Timeout = 5
。传输发生后刷新发生时会出现问题。我收到一个404 Not Found
错误,并且URL更改为http://localhost/305。请注意,5 * 60 + 5 = 305
。
您知道为什么会发生这种情况?得到了解决方案?
PD:我使用转移,因为我需要访问otherpage.aspx上的regularpage.aspx的一些属性,也许您可以为此提供另一个解决方案。
感谢Bryan,实际上server.transfer()不在page_load中是另一个方法(这是一个例子),并且在页面上执行搜索并且单击一个结果后调用该方法,我使用与链接相关联的信息将其传递给其他页面。我调用base.Page_Load()是因为我重写了基类的Page_Load方法,并且由于页生命周期中的执行顺序,子页Page_Load中的代码将在父类的Page_Load之前执行,我需要在父页Page_Load代码之前执行而不是之后执行。 – Unlimited071 2010-03-18 13:36:26
@Bryan您能否告诉我更多关于抽象业务逻辑的知识,以及如何使用它?我只需要从'普通页面'基本上3个整数代码的一些简单的信息。谢谢。 – Unlimited071 2010-03-18 13:39:18
无法告诉你如何在不知道你想要做什么的情况下做到这一点。但总的来说,任何精心设计的ASP.NET应用程序都会在表示层代码中尽可能少地执行任务,并将任务卸载到业务逻辑层中。 265个字符不足以解释这一点!你解决了原来的问题吗?你没有回应... – Bryan 2010-03-18 18:02:24