asp.net-mvc – 如何使基于列表的编辑器模板正确绑定POST操作?
发布时间:2020-12-15 22:25:58 所属栏目:asp.Net 来源:网络整理
导读:我有一个模型ApplicantBranchList,它在较大的模型中用作属性,如下所示: [Display(Name = "Where would you want to work?")]public ApplicantBranchList PreferedBranches { get; set; } ApplicantBranchList: public class ApplicantBranchList : ViewMod
我有一个模型ApplicantBranchList,它在较大的模型中用作属性,如下所示:
[Display(Name = "Where would you want to work?")] public ApplicantBranchList PreferedBranches { get; set; } ApplicantBranchList: public class ApplicantBranchList : ViewModel { public ApplicantBranchItem HeaderItem { get; set; } public ApplicantBranchList() { HeaderItem = new ApplicantBranchItem(); } public void MapFromEntityList(IEnumerable<ApplicantBranch> applicantBranches) { var service = new BranchService(DbContext); var selectedIds = applicantBranches.Select(b => b.BranchId); Items = service.ReadBranches() .Where(i => !i.IsDeleted) .Select(p => new ApplicantBranchItem { BranchName = p.Name,WillWorkAt = selectedIds.Contains(p.Id) }); } public IEnumerable<ApplicantBranchItem> Items { get; set; } } ApplicantBranchList有自己的编辑器模板,以及ApplicantBranchList中每个项目的内部编辑器模板: 查看/共享/ EditorTemplates / ApplicantBranchList.cshtml: @model Comair.RI.UI.Models.ApplicantBranchList <table> <tr> <th style="display: none;"></th> <th> @Html.DisplayNameFor(model => model.HeaderItem.BranchName) </th> <th> @Html.DisplayNameFor(model => model.HeaderItem.WillWorkAt) </th> </tr> @foreach (var item in Model.Items) { @Html.EditorFor(m => item) } </table> 查看/共享/ EditorTemplates / ApplicantBranchItem.cshtml: @model Comair.RI.UI.Models.ApplicantBranchItem <tr> <td style="display: none;"> @Html.HiddenFor(m => m.BranchId) </td> <td> @Html.DisplayFor(m => m.BranchName) </td> <td> @Html.EditorFor(m => m.WillWorkAt) </td> </tr> 此编辑器在视图中正确呈现,但在后期操作中: public ActionResult Create(ApplicantProfileModel model) { if (ModelState.IsValid) { var branches = model.PreferedBranches; PreferedBranches.Items为null. 我究竟做错了什么? 解决方法
问题是ASP.NET无法弄清楚如何绑定到Model.Items属性.
要修复它替换: public IEnumerable<ApplicantBranchItem> Items { get; set; } 有了这个: public List<ApplicantBranchItem> Items { get; set; } 而不是: @foreach (var item in Model.Items) { @Html.EditorFor(m => item) } 使用这一个: @for (var i = 0; i < Model.Items.Count; i++) { @Html.EditorFor(model => model.Items[i]) // binding works only with items which are accessed by indexer } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- [ASP.NET MVC] 产生一维条码Barcode(Code 39、Code128、ISB
- 如何将ASP.NET MVC5身份认证添加到现有数据库
- asp.net-mvc – Web Api调用返回404错误,GUID作为参数传递
- asp.net – 使用谷歌地图api的ASP .NET
- ASP .NET – Eval()背后发生了什么?
- 如何在asp.net c中以pdf格式导出同步图表
- asp.net core webapi 服务端配置跨域的实例
- asp.net-mvc – 在Webgrid中将布尔值显示为复选框
- asp.net – 用于集成的IIS 7的自定义HttpModule
- asp.net-mvc – 部分视图继承自主布局
推荐文章
站长推荐
- [asp.net mvc 奇淫巧技] 02 - 巧用Razor引擎在Ac
- ASP.NET Core 基础教程 - ASP.NET Core 基础教程
- asp.net-mvc – ASP.NET MVC 2 on mono
- asp.net – 为什么Response.BufferOutput = Fals
- asp.net-core – 为什么我的JWT承载认证在令牌表
- ASP.NET URL验证
- Asp.net mvc 知多少(二)
- asp.net-mvc – 设置debug = false实际导致远程S
- asp.net – 实体框架4.0扩展和安全
- asp.net-mvc – ASP.NET MVC中具有动态数量的tex
热点阅读