私は
が
[HttpGet]
public ActionResult Index()
{
TestModel model = new TestModel();
model.Items = new List<string> { "A", "B" };
return View(model);
}
[HttpPost]
public ActionResult Index(TestModel model)
{
return View(model);
}
、
public class TestModel
{
public string SelectedItem { get; set; }
public IEnumerable<SelectListItem> DropdownItems
{
get
{
if (Items == null)
return null;
return Items.Select(i => new SelectListItem { Text = i, Value = i });
}
}
public IEnumerable<string> Items { get; set; }
}
とコントローラでは、などのモデルを定義できます(小規模な説明が続く)の例で、あなたの質問に答えることをしようとします今、ビューでは、
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>TestModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.SelectedItem)
</div>
<div class="editor-field">
@for (int i = 0; i < Model.Items.Count(); i++)
{
@Html.Hidden("Items["+i+"]",Model.Items.ElementAt(i))
}
@Html.DropDownListFor(m=>m.SelectedItem,Model.DropdownItems)
@Html.ValidationMessageFor(model => model.SelectedItem)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
説明:
モデルには、ドロップダウンアイテムのプロパティであるIEnumerable Itemsのプロパティがあります。ビューではアイテムの非表示フィールドを設定することができます。そのため、各投稿要求にデータが設定されます。再度設定する必要はありません。
戻るビュー( "MyView"、BindViewModel())を使用したくないのはなぜですか? –
ポストリクエストでは、ModelStateは状態を保持しているため、再度ドロップダウンを設定する必要はありません(モデルステートをクリアしていない場合)。しかし、リダイレクト後にドロップダウンを保持したいかのようですか? – Manas
@EvgenyLevinこれは私が今やっていることですが、コードの重複です。 –