根据用户角色填充mvc下拉列表
本文关键字:mvc 下拉列表 填充 角色 用户 | 更新日期: 2023-09-27 17:59:49
我在MVC项目的视图中添加了一个下拉列表。下拉列表将根据用户类型进行填充;用户可以创建具有相同或更低访问级别的新用户。访问级别基于对用户进行身份验证时分配的用户"角色"。例如,管理员具有最高的访问级别。他/她可以创建任何用户类型,即。管理员经理监督人CSR只读经理可以创建经理、主管等我有一个"注册"视图,用户将在其中输入创建新用户的详细信息-用户名/密码和访问级别。下拉列表将为他们提供可以创建的用户类型列表。
我的问题是:我应该如何填充下拉列表?我在控制器中有逻辑,我创建下拉列表并将其传递给视图。但问题是,正如预期的那样,当点击"注册"时,下拉列表将丢失。我可以在视图中创建下拉列表,但这是"最佳"做法吗?我有下面的代码供参考;任何建议都将不胜感激。
在ViewModel中:
public class RegisterViewModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
[Required]
[Display(Name = "User type")]
public IEnumerable<System.Web.Mvc.SelectListItem> UserType { get; set; }
}
视图:
@Html.LabelFor(m => m.UserType, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.UserType, Model.UserType, new { @class = "form-control" })
在控制器中:
public ActionResult Register()
{
CSR.Models.ViewModels.Account.RegisterViewModel rvm = new CSR.Models.ViewModels.Account.RegisterViewModel();
rvm.UserType = GetRoles();
return View(rvm);
}
private IEnumerable<SelectListItem> GetRoles()
{
var roles = RolesList().Select(x => new SelectListItem { Value = x.accessLevelID.ToString(), Text = x.accessLevel });
return new SelectList(roles, "Value", "Text");
}
RolesList()方法返回基于User.IsInRole.的用户列表
我认为逻辑可以在视图中,这样每次都会填充下拉列表,但在我缺乏经验的情况下,这似乎违背了"MVC"模式。非常感谢您的建议,谢谢。
您可以使用这个:
- 创建ActionFilter PopulateUserRoles(此筛选器添加到ViewData[Constants.UserTypes]项集合中,其中Constants.UserTypes是字符串常量"UserTypes");这样的过滤器的例子,你可以在过滤器内部注入你需要的一切
- 用这个属性装饰你的动作
- 结果:
[PopulateUserRoles] public ActionResult Register()... ... @Html.DropDownListFor(x => x.UserType, ViewData[Constants.UserTypes]...
此选项不需要控制器中的附加GetRoles()方法和视图模型中的附加IEnumerable UserType属性。使用UIHint可以改进此选项