2013-04-04 160 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