2011-11-28 43 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