2013-04-04 87 views
2

我对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> 
} 

所有日。 ese工作正常(实际上这是我从另一篇文章中找到的所有代码),并且此视图显示我想要的内容,即下拉列表中的值设置为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

你是如何导航到其他意见?他们是部分视图吗?你是否通过另一个控制器重定向? – codingbiz 2013-04-04 23:30:26

回答

1

您需要放置当前获取用户列表的代码,并将SelectListItem列表创建为其他控制器可以访问的单独方法。

你会那么用户属性添加到将要显示该列表中的ViewModels:

public IEnumerable<SelectListItem> Users { get; set; } 

所以在这一点上,你有你需要显示列表。然后,您可以创建,是以列表并对其进行渲染,或只使用一个用户控制内置的DropDownList,你目前有:

@Html.DropDownListFor(x => x.SelectedUser, Model.Users) 
+0

谢谢,这个伎俩真好! – 2013-04-05 01:01:28