母版页将被调用两次。在呈现完整页之后进行一次。此时,isPostback值为false,会话为空。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//SOME CODE
try
{
strUserId = Session[USERID].ToString();
}
catch
{
Response.Redirect("error.aspx");
}
}
}
对于母版页的第一个页面加载(在呈现页面之前),一切都很好。再次呈现后,调用母版页的page_load。这一次访问会话提供了一个例外:
HttpException (会话状态只能在enableSessionState设置为true时使用,无论是在配置文件中还是在页面指令中。还请确保System.Web.SessionStateModule或自定义会话状态模块包含在应用程序配置的
<configuration>\<system.web>\<httpModules>
部分中。)。
如果page_load接到两次或三次电话,我没有任何问题。我只是不想在第二页加载时访问会话。
编辑2
第二个母版页加载是因为我在前面已经看到的代码(当前的Global.asax文件)而发生的。
void Application_Error(object sender, EventArgs e)
{
Server.Transfer("~/ErrorMessage.aspx");
}
ErrorMessage.aspx页是母版页的子页:(
但是,答案仍然是,为什么即使在成功地呈现页面时也会生成Application_Error()?我试图在Application_Error()保留一个断点,每次事件args都是空的。
发布于 2012-08-14 12:26:22
尝试将以下代码添加到您的Web.config
文件中--您可能不得不将其移植进来,因为我不知道它当前的样子。您可以引用此帖子来查看整个会话和条件。
<system.webServer>
<modules>
<!-- UrlRewriter code here -->
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" />
</modules>
</system.webServer>
编辑1
这个问题很可能是围绕着这样一个事实:您试图在母版页的ASPX
页面中连接事件处理程序。这总是会导致访问Session
甚至Application
变量之类的问题。因此,请尝试以下几点:
ASPX
文件中删除标记的up事件处理程序。构造器代码
public MasterPage()
{
this.Load += new EventHandler(Page_Load);
}
然后运行在同一个处理程序中运行的代码。
编辑2
检查您的Web.config
,看看它是否正确地设置了下面的部分。
<system.web>
<pages enableSessionState="true" />
...
</system.web
发布于 2012-08-16 04:07:34
我想我已经找到了问题的原因,在查看了firebug中的请求之后。对于两个不存在的.gif文件,有一些ajax请求存在。因此,调用了Application_Error()在Global.asax中。在那里生成的异常是“文件未找到”。然后在Application_Error()中有一个Application_Error(“~/ErrorMessage.aspx”)。不幸的是,ErrorMessage.aspx是母版页的子页。因此,在每个页面上都发出了AJAX请求,这导致了“found”异常,然后将其传输到ErrorMessage.aspx,看起来就像调用了两次母版页page_load。
发布于 2012-08-14 12:20:55
错误描述告诉您检查使用Session
的设置。你检查过那个设置(enableSessionState
)了吗?
此外,检查error.aspx
没有使用母版页,直到您知道它工作得更好,否则您可能会得到一些奇怪的错误.
https://stackoverflow.com/questions/11951772
复制相似问题