私は次のViewModelを持っています:
 public class ViewModel
    {
        public Address Address {get;set;}
        [DisplayName("State")]
        public IEnumerable<SelectListItem> StateSelect { get; set; }
        public string StateID { get; set; }
        public ViewModel()
        {
        }
        public ViewModel(Stuff s, IDataContext dc)
        {
            StateSelect = dc.States.ToList().Select(x => new SelectListItem
                                                             {
                                                                 Value = x.Id.ToString(),
                                                                 Text = x.Name
                                                             });
           Address = s.Address;
        }
そして私の編集ビューで:
<div class="display-field">
                @Html.DropDownListFor(model => model.Address.StateID, Model.StateSelect,)
                @Html.ValidationMessageFor(model => model.StateSelect)
            </div>
私のコントローラー:
public ActionResult Edit(int id)
        {
            var stuff = context.Stuff.Find(id);
            if (stuff== null)
            {
                throw new Exception("Stuff not found.");
            }
            return View(new ViewModel(stuff, context));
        }
        [HttpPost]
        public ActionResult Edit(ViewModel model)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    //deeper logic, adds to ModelState.AddModelError
                    if(stillNotValid)
                         return View(model)
                }
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
これで、私のEditビューでは、ドロップダウンリストが正しく表示されます。ただし、Editコントローラーに投稿すると、モデルには常にnullのStateSelectが含まれます。
Edit検証エラーが発生した場合にドロップダウンを再入力できるように、StateSelectが自分の投稿にプッシュされていることを確認するにはどうすればよいですか?