asp.net-mvc-3 – ASP.NET MVC 3编辑器模板中的IEnumerable模型
我有一个具有IEnumerable属性的模型(警告伪代码可以遵循)
public class PersonModel { public string Name { get; set; } public IEnumerable<AddressModel> Addresses { get; set; } } public class AddressModel { public string Name { get; set; } } 我想在同一视图中显示Address子对象 Person.cshtml @model PersonModel <form> <h2>Person</h2> @Html.EditorFor(m=>m.Name) <ul>@Html.EditorFor(m=>m.Addresses)</ul> </form> EditorTemplate / AddressModel @model AddressModel <li>@Html.TextboxFor(m=>m.Name)</li> 奇妙,一切正常 但是,作为一个git,我现在想开始使用模板布局以标准类型的方式包装我的所有属性 所以我创建了一个string.cshtml和一个list.cshtml来做这个,使用_Control.cshtml进行布局 EditorTemplates / _Control.cshtml <div> @Html.Label(string.Empty) <div class="input"> @RenderBody() @Html.ValidationMessage(string.Empty) </div> </div> EditorTemplates / string.cshtml @model string @{ Layout = "_Control.cshtml"; } @Html.TextBox(string.Empty,Model) (到目前为止耶!但等等……哦不..) 这是麻烦 <ul>@Html.EditorFor(m=>m.Addresses)</ul> 从主视图(见上文)变成 @Html.EditorFor(m=>m.Addresses,"List") EditorTemplates / list.cshtml @model IEnumerable<object> @{ Layout = "_Control.cshtml"; } <ul> @foreach(var item in Model){ @Html.EditorFor(m => item) } </ul> 这会错误地呈现id和名称,例如Addresses_item_Name,它不包含Id,因此使用for循环添加id @for (var i = 0; i < Model.Count();i++ ) { @Html.EditorFor(m => Model.ElementAt(i)) } 这会爆发,因为MVC表达式助手除了数组之外不允许任何其他内容,但是地址必须是IEnumerable<>因为EF4.1在子查询中不支持.ToArray,即. var model = (from p in DataContext.People where p.Id = 1 select new PersonModel { Name = p.Name,Addresses = (from a in p.Addresses select new AddressModel { Name = a.Name }).ToArray() // **NOT SUPPORTED** }).FirstOrDefault(); 有没有人反对这个? 这有效,但是对吗? EditorTemplates / list.cshtml @model IEnumerable<object> @{ Layout = "_Control.cshtml"; var prefix = ViewData.TemplateInfo.HtmlFieldPrefix; } <ul> @for (var i = 0; i < Model.Count();i++ ) { var item = Model.ElementAt(i); ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("{0}[{1}]",prefix,i); @Html.EditorFor(m => item,null,string.Empty) } </ul> 所需的结构是 <form> <control> Person Name Control Elements <control> <control> Address List Control Elements <control> </form> 解决方法
EditorFor不允许任何put属性类型,而不是方法,这将是它死亡的原因.
我的建议是将模板创建为单个地址项,然后使用外部循环编辑每个模板,或使用为您执行此操作的editorformodel. 硅 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在Ubuntu 16.04中运行ASPNET Cor
- .net – 为什么使用DirectoryEntry对LDAP进行身份
- asp.net-mvc – Azure App Service Web App编译错
- asp.net – 找不到指定文化或中性文化的任何资源
- asp.net – 从命令行更改web.config
- asp.net – Turn by Turn游戏:使用SignalR或Sig
- asp.net – 清除AjaxToolkit AsyncFileUpload控件
- asp.net – Mono有什么不适合的东西?
- .net – 使用UrlHelper.Action方法生成网址时,引
- 24.集成ASP.NETCore Identity