MVC3 を使用して、SelectList の選択された値を設定すると、HttpGet ではビューが正しくレンダリングされるが、HttpPost では正しくレンダリングされないことがわかりました。HttpPost のビューに転送される前にモデルを検査しましたが、正しく更新されています。ビューが選択したタグを正しくレンダリングしていないようです。
HttpPost では、<select>
編集後、フォームの送信前とまったく同じようにレンダリングされます。m.SelectedWidgetId = 2;
HttpPost メソッド内の が実行され、モデルが更新されますが、View には反映されません。
ここで何が欠けていますか?
モデル:
public class WidgetModel
{
private Widget[] Widgets {
get
{
return new Widget[] {
new Widget { Id=1, Name="Item 1" },
new Widget { Id=2, Name="Item 2" },
new Widget { Id=3, Name="Item 3" }
};
}
}
public SelectList WidgetList
{
get
{
return new SelectList(Widgets.ToList(), "Id", "Name", SelectedWidgetId);
}
}
public int SelectedWidgetId { get; set; }
}
意見:
@model thisProject.Models.WidgetModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.SelectedWidgetId, Model.WidgetList, "Select...");
<input type='submit' />
}
コントローラ メソッド;
public ActionResult Widget()
{
var m = new WidgetModel();
m.SelectedWidgetId = 1;
return View(m);
}
[HttpPost]
public ActionResult Widget(WidgetModel m)
{
m.SelectedWidgetId = 2;
return View(m);
}