我对 ASP/MVC3/C# 非常陌生,但目前正在进行一个项目,要求我将数据库中的所有用户列为下拉列表,理想情况下我想过滤它,以便它只显示某些角色的用户(即管理员、员工或学生)。
但是我的问题在于以下,我有一个控制器(Requests.cs),它具有执行以下操作的方法,并允许我转到http://server/Requests/UserList
:
public ActionResult UserList()
{
// Create our view model
var users = Membership.GetAllUsers();
var model = new StudentListViewModel
{
Users = users.OfType<MembershipUser>().Select(x => new SelectListItem
{
Value = x.ProviderUserKey.ToString(),
Text = x.UserName
})
};
return View(model);
}
一个看起来像这样的视图模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace AcademicRegistry.ViewModels
{
public class StudentListViewModel
{
[Display(Name = "select user")]
public string SelectedUser { get; set; }
public IEnumerable<SelectListItem> Users { get; set; }
}
}
以及相关观点:
@model AcademicRegistry.ViewModels.StudentListViewModel
@using (Html.BeginForm())
{
@Html.LabelFor(x => x.SelectedUser)
@Html.DropDownListFor(x => x.SelectedUser, Model.Users)
<button type="submit">OK</button>
}
所有这些工作都很好(实际上这是我从这里的另一篇文章中找到的所有代码),这个视图显示了我想要的,即一个下拉列表,其值设置为 userId,文本显示为用户名。
但是我希望它显示在不同的视图中,即 EditUser,但是它已经有一个与之关联的模型(@model AcademicRegistry.Models.Requests):
@model AcademicRegistry.Models.Requests
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Requests</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.StudentId)
</div>
<div class="editor-field">
*Wanting the dropdown list to show here*
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
我想知道是否有人知道我将如何在需要的地方进行下拉显示?此下拉列表将在很多页面上使用,因此理想情况下需要可重复使用,并且正如我提到的那样,过滤后仅显示属于我设置的 3 个角色的用户。