asp.net-mvc – 将集合传递给EditorFor()时,它会为输入元素生成无效的名称
|
我有一本BookCreateModel,它包括书的飞机信息,如标题,PublishYear&等等书籍作者(复杂类型)的集合: public class BookCreateModel
{
public string Title { get; set; }
public int Year { get; set; }
public IList<AuthorEntryModel> Authors { get; set; }
}
public class AuthorEntryModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在CreateBook视图中我使用了EditorFor Helper: @Html.EditorFor(m => m.Authors,"AuthorSelector") EDIT1: 和AuthorSelector模板如下: <div class="ptr_authors_wrapper">
@for (int i = 0; i < Model.Count; i++)
{
<div class="ptr_author_line" data-line-index="@i">
@Html.TextBoxFor(o => o[i].FirstName)
@Html.TextBoxFor(o => o[i].LastName)
</div>
}
</div>
<script>
...
</script>
AuthorSelector模板包含一些需要注意每个渲染项目的索引的包装标记,还有一些处理子输入的交互并需要渲染一次(在AuthorSelector模板中)的JavaScript,从而摆脱了for循环/或AuthorSelector模板是不可能的. 现在的问题就是EditorFor的动作有点奇怪,生成这样的输入名称: <input id="Authors__0__FirstName" name="Authors.[0].FirstName" type="text" value="" /> <input id="Authors__0__LastName" name="Authors.[0].LastName" type="text" value="" /> 您可以看到,而不是生成名称,如Authors [0] .FirstName它添加了一个额外的点,使默认模型binder无法解析发布的数据. 任何想法 ? 谢谢 ! 解决方法我建议你坚持约定,即替换:@Html.EditorFor(m => m.Authors,"AuthorSelector") 有: @Html.EditorFor(m => m.Authors) 然后将/ Views / Shared / EditorTemplates / AuthorSelector.cshtml重命名为/ Views / Shared / EditorTemplates / AuthorEntryModel.cshtml,并将其强制输入到单个AuthorEntryModel模型,并摆脱循环: @model AuthorEntryModel @Html.TextBoxFor(o => o.FirstName) @Html.TextBoxFor(o => o.LastName) ASP.NET MVC将自动呈现集合的所有元素的编辑器模板,并生成正确的名称. 更新: 看到你的更新在这里是我的回应: 在你的主要观点: <div class="ptr_authors_wrapper">
@Html.EditorFor(m => m.Authors)
</div>
在你的编辑器模板中: @model AuthorEntryModel
<div class="ptr_author_line">
@Html.TextBoxFor(o => o.FirstName)
@Html.TextBoxFor(o => o.LastName)
</div>
你会注意到模板中没有脚本是完全正常的.脚本与标记无关.他们进入单独的javascript文件.在这个文件中,您可以使用jQuery来做任何你需要做的标记.它给出了诸如.index()之类的方法,它允许您在匹配的选择器中获取元素的索引,以便您不需要编写任何循环,并用诸如data-line-index属性这样的东西污染您的标记. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 新的ASP.NET Web应用程序:有一个Login按钮可以执行某些操作
- 我如何让Fiddler捕获我的MVC应用程序向我的ASP.NET Web API
- asp.net – 为什么我不能从Visual Studio 2005安装IE8后调试
- 在ASP.NET中将HTML转换为PDF时保持CSS样式
- asp.net – 如何在Eval格式字符串中使用单引号
- asp.net – 如何保护我的AngularJS和Web Api应用程序
- 如何在ASP.NET中以程序方式模拟HTTP POST?
- asp.net-mvc – 使用Multipart格式的Web API模型绑定
- asp.net – SVG的图像在浏览器与PNG后备
- ASP.NET MVC Model绑定的简单应用
- asp.net核心 – 如何在自己的主机环境中的ASP.NE
- asp.net – Global.asax PostAuthenticateReques
- asp.net-mvc-3 – DI模式是否限制了昂贵的对象创
- asp.net-mvc-3 – 有没有办法使用@ Html.HiddenF
- asp.net-mvc – 如何仅刷新MVC 5中的部分索引页面
- asp.net – 为什么在FireFox中禁用时链接按钮不会
- asp.net-mvc – 清理MVC 3.0应用程序中抛出的所有
- asp.net – Dotnet核心2.0认证多个模式身份cooki
- asp.net-mvc-4 – 找不到布局页面
- 我应该学习不了解MVC 1或2的asp.NET MVC 3吗?
