私は 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 つの役割に該当するユーザーのみを表示するようにフィルター処理されます。