2013-04-04 3 views
2

Я чрезвычайно новичок в ASP/MVC3/C#, но в настоящее время беру проект, который требует, чтобы я перечислял всех пользователей в базе данных как выпадающий список, в идеале я хочу отфильтровать это, чтобы он показывал только пользователей в определенных ролях (т.е. Admin, Staff или Student).Включая модель в модель, я думаю?

Однако моя проблема заключается в следующем, у меня есть контроллер (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

Как вы навигации с другими видами? Являются ли они PartialView? Вы перенаправляетесь через другой контроллер? – codingbiz

ответ

1

Вам нужно будет поместить код, который в настоящее время получает список пользователей, и создает список SelectListItem в отдельный метод, к которому могут обращаться другие контроллеры.

Вы бы затем добавить свойство пользователей к ViewModels, которые будут отображающих этот список:

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

Таким образом, в этот момент, у вас есть список, что вам нужно отобразить. Вы можете либо создать пользовательский элемент управления, который принимает список и делает его, или просто использовать встроенный в DropDownList, как вы в настоящее время:

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

Спасибо, это сделал трюк! –

Смежные вопросы