空引用异常 - 不在重定向上捕获标签值

时间:2015-06-05 02:07:35

标签: c#-4.0

我有一个名为UserInfo的类,它使用PrincipalContext从页面上经过身份验证的用户处获取数据。这项工作在页面加载上成功完成。我在标签的页面加载中捕获用户的活动目录显示名称。

问题:我想重定向到帖子页面。如果我没有将用户重定向到不同的页面,则包含的代码有效,Interent研究表明这是因为状态被保留。此外,即使我在调试模式下收到空错误,数据实际上也存储在数据库中,如预期的那样。但是,当我尝试将用户重定向到新页面时,可能会丢失标签的值并发生此错误。我不知道为什么重定向导致页面再次重新加载,但由于标签值丢失,我的错误然后变成“用户代码未处理的”空引用“。我试图检查一个空值,并实例化该类,如几个帖子所示,但是当我执行调试时,错误显示在这一行:“lbRequesterName.Text = userinfo.DisplayName;”所以,显然我做错了什么。代码页和下面的标记。

protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            UserInfo userinfo = new UserInfo();

            if (userinfo != null)
            {
                lbRequesterName.Text = userinfo.DisplayName;
            } 
        }

    //Submit data
        protected void btnSubmit_click(object sender, EventArgs e)
        {
            insertReg();
        }


        protected void insertReg()
        {
            DataTable dt = new DataTable();

            string strHidRecID = hidRecID.Value;
            if (strHidRecID == "") strHidRecID = "0";

            dt = dataAccessClass.ExecuteDataTable
            (
                "spRegInsert", dataAccessClass.dbName, new SqlParameter[2]
                {
                    new SqlParameter ("@vRequesterName",lbRequesterName.Text),
                    new SqlParameter ("@vRecID", strHidRecID)

                }
            );

            hidRecID.Value = dt.Rows[0]["recID"].ToString();
            Response.Redirect("RegPost.aspx?recID=" + dt.Rows[0]["recID"].ToString());
        }


//Markup
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<form id="frmInput" runat="server" action="">



<asp:Label runat="server" ID="lbRequesterName" Text="Name"></asp:Label>

<asp:Button ID="btnSubmit" runat="server" CssClass="btn" OnClick="btnSubmit_click" Text="Submit"/>

<asp:HiddenField runat="server" ID="hidRecID"/>

1 个答案:

答案 0 :(得分:0)

问题是我的webconfig文件没有在帖子页面上验证用户身份。我在Web配置中添加了这一行,以允许经过身份验证的用户,其余代码可以工作:

<location path="RegPost.aspx">
<system.web>
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>