Object ASP.NET将角色分配给用户-“对象引用未设置为对象的实例。”

Object ASP.NET将角色分配给用户-“对象引用未设置为对象的实例。”,object,exception,instance,roles,Object,Exception,Instance,Roles,我正在创建一个基本的角色管理系统,在这个系统中,我的网站的用户可以被添加到特定的角色中,这样他们就可以访问网站的专有部分 我已设法将角色添加到我的数据库中,但当我尝试将用户分配到特定角色时,会出现“对象引用未设置为对象的实例”错误,我无法找出原因 这是我的密码: protected void btnAssignRole_Click(object sender, EventArgs e) { try { if (!Roles.IsUs

我正在创建一个基本的角色管理系统,在这个系统中,我的网站的用户可以被添加到特定的角色中,这样他们就可以访问网站的专有部分

我已设法将角色添加到我的数据库中,但当我尝试将用户分配到特定角色时,会出现“对象引用未设置为对象的实例”错误,我无法找出原因

这是我的密码:

protected void btnAssignRole_Click(object sender, EventArgs e)
    {
        try
        {
            if (!Roles.IsUserInRole(lstRoles.SelectedItem.Value))
            {
                Roles.AddUserToRole(lstUsers.SelectedItem.Value, lstRoles.SelectedItem.Value);
                lstRoles.DataBind();
                lstUsers.DataBind();
                litRoleResult.Text = "User added to Role";
            }
            else
            {
                litRoleResult.Text = "User already in this Role";
            }
        }
        catch (Exception ex)
        {
            litRoleResult.Text = ex.Message;
        }
    }
HTML:


感谢您的帮助。

看起来您正在使用一些必须在全局范围内声明的对象:Roles、lstRoles、lstUsers和litRoleResult都必须在某个时候初始化,因为它们没有在您的方法中初始化。 我的怀疑是,如果在这个方法上设置断点,其中一个对象将为null。另外,如果lstUsers或lstRoles没有选择项,我很确定调用SelectedItem.Value会抛出异常;确保SelectedItem具有值它是否具有.HasValue属性?在调用值之前

编辑:对不起,我错过了ASP.NET部分;我假设您的lstUsers和lstrole是页面上的对象。在这种情况下,我肯定倾向于将SelectedItem属性设置为null。列表是否允许多选?

已解决

使用Kalmino评论中的链接,我修改了以下内容:

在页面中,我更改了加载方法

protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            lstRoles.DataBind();
            lstUsers.DataBind();

        }
    }

从我原来的问题我也改变了

if (!Roles.IsUserInRole(lstRoles.SelectedItem.Value))
排队

if (!Roles.IsUserInRole(lstUsers.SelectedItem.Text, lstRoles.SelectedItem.Text)) 

你好Roles是System.Web.Security中的“Roles”类。我应该在.cs文件的顶部声明这个名称空间。lstRoles和lstUsers是绑定到我的数据库的列表框控件,而litRoleResult是一个文本控件。我也会用html修改我原来的帖子;似乎DataBind存在一些问题,导致.SelectedValue返回为null。看看这是否有帮助:
if (!Roles.IsUserInRole(lstRoles.SelectedItem.Value))
if (!Roles.IsUserInRole(lstUsers.SelectedItem.Text, lstRoles.SelectedItem.Text))