2015-06-05 78 views
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"/> 
+0

您正在創建UserInfo'的'一個新的實例,當你寫'的UserInfo用戶信息=新的UserInfo( );',這意味着它不是null(因此它爲什麼進入'if(userinfo!= null)',然後嘗試從這個新創建的對象讀取'userinfo.DisplayName'。你剛剛創建的新實例 - 它只包含你從UserInfo構造函數賦值的任何值 – grovesNL

+0

嗯,我不確定我是否理解 - 有沒有辦法寫這個,以便我能夠保留任何當我創建對象時,或者以某種方式分配屁股把它放在別的地方?對我來說,奇怪的是,當我添加response.redirect行時,這個錯誤只會觸發。不知道我明白爲什麼它會回到!回發行開始? – SeanFlynn

回答

0

問題是我的webconfig文件沒有在帖子頁面上驗證用戶。我加入的web配置這條線,以允許通過驗證的用戶,以及其他代碼的工作:

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