次のコードがあります。
public class OrganisationController : Controller
{
//
// GET: /Organisation/
public ActionResult Update()
{
var fisherman = new RoleType {Id = 1, Name = "Fisherman"};
var manager = new RoleType {Id = 2, Name = "Manager"};
var deckhand = new RoleType {Id = 3, Name = "Deckhand"};
var roleTypes = new List<RoleType>
{
fisherman, manager, deckhand
};
ViewBag.Roles = new SelectList(roleTypes, "Id", "Name");
return View(
new Organisation
{
Name = "Fish Co.",
People = new List<Person>
{
new Person
{
Name = "Squid",
RoleType = fisherman
},
new Person
{
Name = "Michael",
RoleType = manager
},
new Person
{
Name = "John",
RoleType = deckhand
}
}
});
}
[HttpPost]
public ActionResult Update(Organisation org)
{
return View();
}
}
public class Organisation
{
public string Name { get; set; }
public IList<Person> People { get; set; }
}
public class Person
{
public string Name { get; set; }
public RoleType RoleType { get; set; }
}
public class RoleType
{
public int Id { get; set; }
public string Name { get; set; }
}
Update.cshtml 内
@model Models.Organisation
<form action="" method="post" enctype="multipart/form-data">
@Html.EditorFor(x => x.Name)
@Html.EditorFor(x => x.People)
<input type="submit"/>
</form>
EditorTemplates Person.cshtml で:
@model Models.Person
@Html.EditorFor(x => x.Name)
@if(Model != null)
{
@Html.DropDownListFor( x => x.RoleType.Id, (SelectList)ViewBag.Roles)
}
組織名、人の名前、およびその役割を更新できるページにアクセスできることを期待していました。問題は、選択したアイテムをドロップダウンに設定できないことです。私x => x.RoleType.Id
は私のためにこれをするだろうと思った。
これを機能させる方法を知っている人はいますか?