我对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个角色的用户。
答案 0 :(得分:1)
您需要放置当前获取用户列表的代码,并将SelectListItem列表创建为其他控制器可以访问的单独方法。
然后,您将Users属性添加到将显示此列表的ViewModel:
public IEnumerable<SelectListItem> Users { get; set; }
所以在这一点上,你有你需要显示的列表。然后,您可以创建一个获取列表并呈现它的用户控件,或者只使用您当前拥有的内置DropDownList:
@Html.DropDownListFor(x => x.SelectedUser, Model.Users)