我的网络表单包含如下生成的动态字段列表:
<% for (int i = 0; i < Model.Options.Count; i++) { %>
...
<%= Html.Hidden("Options[" + i + "].Id", Model.Options[i].Id)%>
<%= Html.CheckBox("Options[" + i + "].Selected", Model.Options[i].Selected)%>
...
这完全映射到控制器方法参数数组,如Model Binding To A List文章中所述。
我想为复选框添加标签以标题,但我必须在hmtl布局中猜测它们的ID。
Options[" + i + "].Selected
变为Options_0__Selected
。
所以我添加这样的代码:
<label for="Option_<%=i%>__Selected"><%: Model.Option[i].Title%></label>
如何避免硬编码Id生成内置的asp.net mvc规则?
答案 0 :(得分:1)
您可以使用editor templates实现此目的 - 不再需要魔术字符串:
<%= Html.EditorFor(x => x.Options) %>
然后在Option.ascx
文件夹中放置Views/Shared/EditorTemplates
:
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<YourNamespace.Option>" %>
<%= Html.HiddenFor(x => x.Id) %>
<%= Html.LabelFor(x => x.Selected) %>
<%= Html.CheckBoxFor(x => x.Selected) %>