asp.net-mvc – 如何编辑MVC4表单中的子对象?
我有以下内容:
@foreach (var parent in Model.Parents) { @foreach (var child in parent.Children) { @Html.TextAreaFor(c => child.name) } } 如何编辑子对象?我也试过这样的事情: <input type="hidden" name="children.Index" value="@child.Id" /> <textarea name="children[@child.Id]" >@child.Name</textarea> 要将IDictionary传递给控制器??,但我收到错误: [InvalidCastException: Specified cast is not valid.] System.Web.Mvc.CollectionHelpers.ReplaceDictionaryImpl(IDictionary`2 dictionary,IEnumerable`1 newContents) +131 这似乎是一项非常普遍的任务……有一个简单的解决方案吗?我错过了什么?我需要使用编辑模板吗?如果是这样,任何兼容MVC4的例子都会很棒. 解决方法
是.
编辑模板.
是.
ASP.NET MVC 4?自从ASP.NET MVC 2以来,存在编辑器模板.您需要做的就是使用它们. 所以首先摆脱外部foreach循环并将其替换为: @model MyViewModel @Html.EditorFor(x => x.Parents) 然后显然定义了一个编辑器模板,它将自动为Parents集合的每个元素呈现(?/ Views / Shared / EditorTemplates / Parent.cshtml): @model Parent @Html.EditorFor(x => x.Children) 然后是Children集合的每个元素的编辑器模板(?/ Views / Shared / Editortemplates / Child.cshtml),我们将摆脱内部的foreach元素: @model Child @Html.TextAreaFor(x => x.name) 一切都按照ASP.NET MVC中的约定进行.所以在这个例子中,我假设Parents是一个IEnumerable< Parent>和儿童是IEnumerable< Child>.相应地调整模板的名称. 结论:每次使用foreach或在ASP.NET MVC视图中,你都做错了,你应该考虑删除它并用编辑器/显示模板替换它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC LINQ to SQL或Entities?
- asp.net – 无法编写输出文件… pdb visual studio 2010
- asp.net-mvc – 在asp .net mvc 5中显示外部网页
- asp.net – RequiredFieldValidator – 如何摆脱默认的红色
- asp.net-mvc-4 – 捆绑与缩小,哪一个是最好的
- asp.net – 如何填充asp:DropDown客户端?
- asp.net – SignalR和HttpContext / Session
- 如何在ASP.net中取消事件冒泡?
- 更改ASP.NET XHTML渲染模式
- 用枚举填充ASP.NET MVC中的SelectList