私は .net MVC 2.0 を使用しており、カスタム ViewModel オブジェクトを受け取る編集ビューをセットアップしました。ViewModel は、次の 2 つのプロパティを持つクラスです。
// Properties
public Portfolio Portfolio { get; private set; }
public SelectList slSectors { get; private set; }
私の見解では、ポートフォリオ オブジェクトを更新するためのフォームがあります。SelectList が渡されるので、ポートフォリオに関連するセクターのドロップダウン リストを作成できます。ここでは特別なことは何もありません。1.0 で行ったのとまったく同じです。
新しい TextBoxFor および DropDownListFor ヘルパー メソッドを使用すると、問題が発生します。
私は次のように設定しています:
<%= Html.ValidationMessageFor(model => model.Portfolio.SectorID)%>
<%= Html.LabelFor(model => model.Portfolio.SectorID)%>
<%= Html.DropDownListFor(model => model.Portfolio.SectorID, Model.slSectors, new { @class = "selectInput" })%>
<%= Html.ValidationMessageFor(model => model.Portfolio.Title)%>
<%= Html.LabelFor(model => model.Portfolio.Title)%>
<%= Html.TextBoxFor(model => model.Portfolio.Title, new { @class = "textInput" })%>
これらは、次の HTML 出力を (それぞれ) 生成しています。
<span class="field-validation-valid" id="form0_Portfolio_SectorID_validationMessage"></span>
<label for="Portfolio_SectorID">SectorID</label>
<select class="selectInput" id="Portfolio_SectorID" name="Portfolio.SectorID"><option selected="selected" value="2">Education</option>
法
<span class="field-validation-valid" id="form0_Portfolio_Title_validationMessage"></span>
<label for="Portfolio_Title">Title</label>
<input class="textInput" id="Portfolio_Title" name="Portfolio.Title" type="text" value="Portfolio Title" />
name および id 属性には「Portfolio」プレフィックスが付いていることに注意してください。これは、「model.Portfolio.X」から派生しているためだと思います。これは、Edit ActionResult の Controller で Model Binding を適用する機能を妨げているようです。
ActionResult は次のとおりです。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formData)
{
var portfolio = Repository.GetPortfolio(id);
if (portfolio == null)
return RedirectToAction("NotFound");
try
{
UpdateModel(portfolio);
portfolio.DateUpdated = DateTime.Now;
Repository.Save();
return RedirectToAction("Index");
}
catch (Exception e)
{
ModelState.AddModelError("_Form", e.Message);
}
return View(new vmPortfolio(portfolio));
}
(a) "Portfolio" プレフィックスがビューに適用されないようにするか、(b) ModelBinding を存在させて動作させるにはどうすればよいですか。
ありがとう、
マイク