2011-11-28 45 views
1

我正在一個asp.net項目中嘗試返回當前登錄使用的用戶ID。我已經在C#中編寫了用戶登錄,因爲我* 不能使用由於其他約束而使用asp內置控件。 我想從遠程SQL數據庫獲取用戶標識,然後將其用作另一個函數的變量。這樣我就可以將用戶ID分配到正在下面的函數中創建的問卷。我試過使用membership.getUser,但沒有運氣。獲取用戶ID並解析到會話變量C#

編輯:當我運行該項目時出現錯誤「System.NullReferenceException:對象引用未設置爲對象的實例。」其指着string UserID = membershipUser.ProviderUserKey.ToString()

new_questionnaire.aspx.cs(縮短)

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Web.Security; 
using Questionnaire; 

    public partial class new_questionnaire : System.Web.UI.Page 
    { 
     OsqarSQL sendData; 

      protected void NewQnrButton_Click(object sender, EventArgs e) 
      { 
       // Check if the input fields are empty. 
       if (QuestionnaireName.Text == "" || CustomerID.Text == "" || NumberOfQuest.Text == "") 
       { 
        lblError.Text = "Input fields cannot be blank"; 
       } 
       // Parse input values to OscarSQL. 
       else 
       { 
        MembershipUser membershipUser = Membership.GetUser(); 
        string userID = membershipUser.ProviderUserKey.ToString(); 
        int testRet = sendData.InsertQuestionnaire(QuestionnaireName.Text, Int32.Parse(userID), Int32.Parse(NumberOfQuest.Text)); 
        Session["QuestionnaireID"] = testRet; 
        Session["QuestionnaireName"] = QuestionnaireName.Text; 
        Response.Redirect("~/buildq/add_questions.aspx"); 
       } 

      } // End NewQNRButton_Click 

     } // End new_questionnaire 

任何幫助,將不勝感激。

+2

你有什麼錯誤嗎?什麼不起作用?你需要更具體的 –

+0

@leppie:好的,英語不是我的母語。除此之外,Jakub已經問過它:) – Jan

+0

@Jan:沒問題:) – leppie

回答

2

檢查Membership.GetUser()返回不是null用戶。如果返回的用戶對象爲null意味着沒有登錄用戶。您可能需要重定向回登錄頁面並驗證用戶身份。

而且ProviderUserKey可能是一個GUID不是一個整數,那麼你不能將它轉換爲一個整數。

MembershipUser membershipUser = Membership.GetUser(); 
if(null != membershipUser) 
{ 
    int userId; 
    if(int.TryParse(membershipUser.ProviderUserKey.ToString(), out userId) 
    { 
     int testRet = sendData.InsertQuestionnaire(QuestionnaireName.Text, userId, Int32.Parse(NumberOfQuest.Text)); 
     Session["QuestionnaireID"] = testRet; 
     Session["QuestionnaireName"] = QuestionnaireName.Text; 
     Response.Redirect("~/buildq/add_questions.aspx"); 
    } 

}else 
{ 
    // user may not login , redirrect to login page 
} 
+0

抱歉,延遲響應。這個項目被擱置了幾個星期。 我試着實現你的解決方案,但是看起來第二個if語句失敗並且返回用戶登錄頁面。 斷點顯示它在語句 'if(null!= membershipUser)'上失敗,但用戶已登錄。 可能會出現什麼問題? 謝謝 – HGomez90