获取用户ID并解析为会话变量C#

时间:2011-11-28 16:14:54

标签: c# asp.net session login

我正在开发一个asp.net项目,我正在尝试返回当前登录使用的用户ID。我已经用C#编写了用户登录,因为由于其他限制,我* 无法使用asp内置控件。 我想从远程SQL数据库中获取用户ID,然后将其用作另一个函数的变量。这样我就可以将userID分配给在下面的函数中创建的调查问卷。我尝试过使用membership.getUser,但没有运气。

编辑:当我运行项目时,我收到错误“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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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
}