MVC (NerdDinner チュートリアル) の基礎を学ぼうとしています。モデルを定義しました:
public class DinnerFormViewModel
{
// Properties
public Dinner Dinner { get; private set; }
public SelectList Countries { get; private set; }
// Constructor
public DinnerFormViewModel(Dinner dinner)
{
Dinner = dinner;
Countries = new SelectList(PhoneValidator.Countries, dinner.Country);
}
}
そして私は部分的なビューを定義しました:
@model MyNerddiner.Models.DinnerFormViewModel
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Dinner</legend>
@Html.HiddenFor(model => model.Dinner.DinnerID)
<div class="editor-label">
@Html.LabelFor(model => model.Dinner.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Dinner.Title)
@Html.ValidationMessageFor(model => model.Dinner.Title)
</div>
</fieldset>
}
これは通常のビューからロードされます:
@model MyNerddiner.Models.DinnerFormViewModel
@{
ViewBag.Title = "Create";
}
<div id="Create" >
<h2>Host a Dinner</h2>
@Html.Partial("_DinnerForm")
</div>
コントローラー:
public ActionResult Create()
{
Dinner dinner = new Dinner()
{
EventDate = DateTime.Now.AddDays(7)
};
return View(new DinnerFormViewModel(dinner));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(DinnerFormViewModel dinnerViewModel)
{
Dinner dinner = null;
if (ModelState.IsValid)
{
try
{
dinner = dinnerViewModel.Dinner;
UpdateModel(dinner);
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id = dinner.DinnerID });
}
catch
{
ModelState.AddRuleViolations(dinner.GetRuleViolations());
return View(dinner);
}
}
return View(new DinnerFormViewModel(dinner));
}
(ポストバック時に)作成しようとすると、エラーが発生します:
このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。
プログラムがどこかで を開始しようとしていることが原因であると推測できますが、どこDinnerFormViewModel
で、なぜ、どのように正しくする必要がありますか?