我希望在 MVC5 中创建项目时默认出现的寄存器中,在重复密码下,放置一个选择列表 ( ),它向我显示Visual Studio 默认创建ComboBox
的表中存在的角色列表。AspNetRoles
我在获取 的列表时遇到了问题AspNetRoles
,因为我不知道哪个上下文正在使用Idendity
,而且我也不确切知道如何创建select
.
我只需要知道如何在控制器中获取列表以及如何将其传递给视图,我
Insert
不需要它。
我的控制器:
// GET: /Account/Register
[AllowAnonymous]
public ActionResult Register()
{
return View();
}
我的视线:
@model StyleTest.Models.RegisterViewModel
@{
ViewBag.Title = "Registrarse";
}
<h2>@ViewBag.Title.</h2>
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Cree una cuenta nueva.</h4>
<hr />
@Html.ValidationSummary("", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Registrarse" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
我在 web.config 中的连接:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=StyleTest;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="StyleTestEntities" connectionString="metadata=res://*/Contexto.StyleTest.csdl|res://*/Contexto.StyleTest.ssdl|res://*/Contexto.StyleTest.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=StyleTest;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
我将 MVC5 与 Visual Studio 2015 一起使用。
阅读有关 Identity 及其内部工作原理的文档绝不是一个坏主意。有了这个,您就会知道 Identity 相对于应用程序 (ApplicationDbContext)有自己的上下文。事实上,如果您在 VS 新生成的项目上启用迁移,您会看到它要求指定您要将迁移定位到哪个 DbContext(这是因为您可以“扩展” IdentityModels 属性)。在官方文档中,您将能够看到这一切的原因和原因。
首先,在您的控制器内部,您必须做出某些定义:
有了这个,你将 分配
ApplicationDbContext()
给一个变量userContext
,你用这个实现了什么?... 访问 Identity API,就好像它是一个普通的 DbContext。您将能够看到类角色、用户等。并通过您认为方便的 LINQ 进行查询(其中,您将角色分配给可枚举以将它们传递给您的 SelectList)。它会是这样的(我特别得到角色/用户和用户):
然后传递给 SelectList(在这种情况下通过 ViewBag,使用任何你想要的,你甚至可以在 JSON 中发送这些数据以在 JS 前端利用它):
您通过 Razor 分配给该 ViewBag 的选择将具有
value
角色的 ID 和角色option
的名称。在记录的 POST 方法中(您必须使用 viewModel yes 或 yes 才能正确添加此新字段),您可以按如下方式分配角色:
您必须使用
UserManager
才能获取用户 ID,在初始实现中它已经初始化,因此您可以直接使用它们。我创建了一个 NuGet 包,它生成一个控制器和视图,其中包含为不同用户创建、分配、编辑和删除角色所需的一切。它适用于 MVC5,视图适用于 Bootstrap:
https://www.nuget.org/packages/ManageUsersProsmart/
你安装它就可以了,它也可以作为一个例子。问候。
必须首先实例化上下文:
然后将其添加到
register
您需要的位置或位置:最后,在您的视图中,您必须添加以下内容,以便它反映您需要的数据:
就这些。