ASP.NET母版页错误

时间:2012-08-14 11:57:41

标签: c# asp.net

主页被调用两次。一旦完整页面呈现后。此时isPostback值为false,SESSION为null。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //SOME CODE

        try
        {
            strUserId = Session[USERID].ToString();
        }
        catch
        {
            Response.Redirect("error.aspx");
        }
    }
}

对于母版页的第一页加载(在渲染页面之前)一切都很好。再次渲染后,调用master_page的page_load。这次访问SESSION是一个例外:

  

HttpException(只有在配置文件或Page指令中将enableSessionState设置为true时才能使用会话状态。还请确保System.Web.SessionStateModule或自定义会话状态模块包含在{应用程序配置中的{1}}部分。

如果调用page_load两次或三次,我没有任何问题。我只是不想在第二页加载时访问SESSION。

编辑2

第二次母版页加载正在发生,因为我之前已经监督过这段代码(现在的Global.asax文件)

<configuration>\<system.web>\<httpModules>

ErrorMessage.aspx页面是母版页的子页面:(

但仍然回答的问题是为什么即使成功呈现页面也会生成Application_Error()?我试图在Application_Error()处保留一个断点,每次事件args都为空。

3 个答案:

答案 0 :(得分:2)

尝试将以下代码添加到Web.config文件中 - 您可能需要将其删除,因为我不知道它目前是什么样的。您可以参考此post来查看整个会话和条件。

<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变量等问题相关的问题。所以,请尝试以下方法:

  1. ASPX文件中删除标记的事件处理程序。
  2. 在母版页的构造函数中放置以下代码。
  3. 构造函数代码

    public MasterPage()
    {
        this.Load += new EventHandler(Page_Load);
    }
    

    然后运行您在同一个处理程序中运行的代码。

    编辑2

    检查您的Web.config并查看是否正确设置了以下部分。

    <system.web>
        <pages enableSessionState="true" />
        ...
    </system.web
    

答案 1 :(得分:1)

我认为在查看了firebug中的请求后,我找到了问题的原因。一些ajax请求有两个.gif文件,这些文件不存在。因此,调用了Global.asax中的Application_Error()。生成的异常是“找不到文件”。然后在Application_Error()中有一个Server.Transfer(“〜/ ErrorMessage.aspx”)。不幸的是,ErrorMessage.aspx是母版页的子页面。因此,在每个页面上都会发出AJAX请求,导致“找不到文件”异常,然后它被转移到ErrorMessage.aspx,它看起来像主页page_load被调用了两次。

答案 2 :(得分:0)

错误说明会指示您检查使用Session的设置。你检查过那个设置(enableSessionState)吗?

另外,检查error.aspx是否使用母版页,直到您知道它更好用,否则您可能会遇到一些奇怪的错误......