は、私はビューモデルに列挙プロパティを編集する必要がある状況があります:私はthisポストに従っているMVCビューでの編集のIEnumerableモデルプロパティ
public class ViewModel
{
public MyObj Obj { get; set; }
public IEnumerable<MyObj> MyObjs = new List<MyObj>();
}
を。コントローラのアクション:
public ActionResult Index()
{
var viewModel = new ViewModel();
viewModel.Obj = new Obj() { Name = "0", Value = true };
var o1 = new MyObj() { Name = "1", Value = false };
var o2 = new MyObj() { Name = "2", Value = false };
viewModel.Objs = new List<Obj>() { o1, o2 };
return View(viewModel);
}
[HttpPost]
public ActionResult Index(ViewModel viewModel)
{
return View(viewModel);
}
Indexビューを次のように
<% using (Html.BeginForm()) { %>
<table>
<tr>
<th>Name</th>
<th>Value</th>
</tr>
<%= Html.EditorFor(x => x.Objs) %>
</table>
<br />
<input type="submit" value="Submit" />
<% } %>
そして "〜/ビュー/ホーム/ EditorTemplates/Obj.ascx" のエディタテンプレートを:
<tr>
<td><%: Html.TextBoxFor(x => x.Name) %></td>
<td><%: Html.CheckBoxFor(x => x.Value) %></td>
</tr>
問題は:インデックスを参照すると、データが表示されます。 POSTと列挙可能なデータが消えます。ステップス・スルー、ビュー・モデル内の特異な「Obj」が残っているので、消えていく列挙可能なデータだけです。
私はこれをしばらく前から見てきました。誰か助けてくれれば華麗になるでしょう。
乾杯、
Tim。
私はこの記事で検出できる唯一の違いは、 "for"ステートメントを使用していたことです。これは残念なことに、異なるHTMLや異なる結果を生成しませんでした。 – Hanshan
ビューで生成されたHTMLをチェックしましたか?すべてのObjエディタは同じ名前/ IDを持っていますか?それらはインデクサー(つまり、)で生成されている必要があります。 –
Stephenにお手伝いしてくれてありがとう。残念ながら、それらは正しいと思われます。名前= "MyObjs [0] .Name"と "MyObjs [1] .Name" - 私に手がかりを与えません! – Hanshan