Asp.net mvc 在MVC asp.net中保存多对多

Asp.net mvc 在MVC asp.net中保存多对多,asp.net-mvc,ado.net,entity-framework-6,Asp.net Mvc,Ado.net,Entity Framework 6,我读了很多关于MVC的书。但到目前为止,还没有明确的答案如何处理多对多关系,因为这些教程的许多结果都有相同的错误。 我使用的是数据库优先的方法,我的应用程序应该添加用户,在添加用户时,我应该有一个来自角色的列表,我可以将这些角色添加到该用户,或者相反,我可以有带有用户列表和编辑的角色,正如我们所知,当我向ado.net添加带有中断表的数据库时,关系将是多对多。 我已成功添加角色列表,但当我按save时,出现了空引用异常。 这是我的代码: 首先是自定义视图: namespace UserMangm

我读了很多关于MVC的书。但到目前为止,还没有明确的答案如何处理多对多关系,因为这些教程的许多结果都有相同的错误。
我使用的是数据库优先的方法,我的应用程序应该添加用户,在添加用户时,我应该有一个来自角色的列表,我可以将这些角色添加到该用户,或者相反,我可以有带有用户列表和编辑的角色,正如我们所知,当我向ado.net添加带有中断表的数据库时,关系将是多对多。
我已成功添加角色列表,但当我按save时,出现了空引用异常。
这是我的代码:

首先是自定义视图:

namespace UserMangment.ViewModel
{
    public class RolesViewMode
    {
        public tab_OnlineUsers OnlineUsers { get; set; }
        public IEnumerable<SelectListItem> AllRolesnames { get; set; }

        private List<string> _selectedRolesname;


        public List<string> SelectedRoleTags
        {
            get
            {
                if (_selectedRolesname == null)
                {
                    _selectedRolesname = OnlineUsers.tab_OnlineRoles.Select(m => m.Id).ToList();
                }
                return _selectedRolesname;
            }
            set { _selectedRolesname = value; }
        }


    }
}
最后,创建视图:

@model UserMangment.ViewModel.RolesViewMode

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>tab_OnlineUsers</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.OnlineUsers.Id, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.Id, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.Id, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.EmailConfirmed, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.EmailConfirmed)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.EmailConfirmed, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.PasswordHash, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.PasswordHash, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.PasswordHash, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.SecurityStamp, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.SecurityStamp, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.SecurityStamp, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.PhoneNumber, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.PhoneNumber, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.PhoneNumber, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.PhoneNumberConfirmed, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.PhoneNumberConfirmed)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.PhoneNumberConfirmed, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.TwoFactorEnabled, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.TwoFactorEnabled)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.TwoFactorEnabled, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.LockoutEndDateUtc, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.LockoutEndDateUtc, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.LockoutEndDateUtc, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.LockoutEnabled, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.LockoutEnabled)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.LockoutEnabled, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.AccessFailedCount, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.AccessFailedCount, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.AccessFailedCount, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.UserName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.UserName, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.AllRolesnames, "Roles Name", new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.ListBoxFor(m => m.SelectedRoleTags, Model.AllRolesnames)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>


}
@model usermanagement.ViewModel.RolesViewMode
@{
ViewBag.Title=“创建”;
}
创造
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
tab_在线用户

@Html.ValidationSummary(true,“,new{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.Id,htmlAttributes:new{@class=“controllabel col-md-2”}) @EditorFor(model=>model.OnlineUsers.Id,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.Id,“,new{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.Email,htmlAttributes:new{@class=“controllabel col-md-2”}) @EditorFor(model=>model.OnlineUsers.Email,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.Email,“,新{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.EmailConfirmed,htmlAttributes:new{@class=“control label col-md-2”}) @Html.EditorFor(model=>model.OnlineUsers.emailconfirm) @Html.ValidationMessageFor(model=>model.OnlineUsers.EmailConfirmed,“,new{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.PasswordHash,htmlAttributes:new{@class=“controllabel col-md-2”}) @EditorFor(model=>model.OnlineUsers.PasswordHash,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.PasswordHash,“,新的{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.SecurityStamp,htmlAttributes:new{@class=“controllabel col-md-2”}) @EditorFor(model=>model.OnlineUsers.SecurityStamp,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.SecurityStamp,“,新的{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.PhoneNumber,htmlAttributes:new{@class=“controllabel col-md-2”}) @EditorFor(model=>model.OnlineUsers.PhoneNumber,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.PhoneNumber,“,新的{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.phonenumberconfirm,htmlAttributes:new{@class=“control label col-md-2”}) @Html.EditorFor(model=>model.OnlineUsers.phonenumberconfirm) @Html.ValidationMessageFor(model=>model.OnlineUsers.PhoneNumberConfirmed,“,new{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.twofacturenabled,htmlAttributes:new{@class=“control label col-md-2”}) @EditorFor(model=>model.OnlineUsers.TwoFactorEnabled) @Html.ValidationMessageFor(model=>model.OnlineUsers.twofacturenabled,“,new{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.LockoutEndDateUtc,htmlAttributes:new{@class=“control label col-md-2”}) @EditorFor(model=>model.OnlineUsers.LockoutEndDateUtc,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.LockoutEndDateUtc,“,new{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.LockoutEnabled,htmlAttributes:new{@class=“control label col-md-2”}) @Html.EditorFor(model=>model.OnlineUsers.LockoutEnabled) @Html.ValidationMessageFor(model=>model.OnlineUsers.LockoutEnabled,“,新{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.AccessFailedCount,htmlAttributes:new{@class=“control label col-md-2”}) @EditorFor(model=>model.OnlineUsers.AccessFailedCount,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.AccessFailedCount,“,新{@class=“text danger”}) @LabelFor(model=>model.OnlineUsers.UserName,htmlAttributes:new{@class=“controllabel col-md-2”}) @EditorFor(model=>model.OnlineUsers.UserName,new{htmlAttributes=new{@class=“form control”}) @Html.ValidationMessageFor(model=>model.OnlineUsers.UserName,“,新{@class=“text danger”})
@model UserMangment.ViewModel.RolesViewMode

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>tab_OnlineUsers</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.OnlineUsers.Id, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.Id, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.Id, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.EmailConfirmed, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.EmailConfirmed)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.EmailConfirmed, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.PasswordHash, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.PasswordHash, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.PasswordHash, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.SecurityStamp, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.SecurityStamp, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.SecurityStamp, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.PhoneNumber, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.PhoneNumber, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.PhoneNumber, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.PhoneNumberConfirmed, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.PhoneNumberConfirmed)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.PhoneNumberConfirmed, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.TwoFactorEnabled, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.TwoFactorEnabled)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.TwoFactorEnabled, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.LockoutEndDateUtc, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.LockoutEndDateUtc, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.LockoutEndDateUtc, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.LockoutEnabled, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model =>model.OnlineUsers.LockoutEnabled)
                    @Html.ValidationMessageFor(model =>model.OnlineUsers.LockoutEnabled, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.AccessFailedCount, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.AccessFailedCount, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.AccessFailedCount, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model =>model.OnlineUsers.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model =>model.OnlineUsers.UserName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model =>model.OnlineUsers.UserName, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.AllRolesnames, "Roles Name", new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.ListBoxFor(m => m.SelectedRoleTags, Model.AllRolesnames)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>


}