猜猜自动生成的ID

时间:2010-05-20 11:19:19

标签: asp.net-mvc

我的网络表单包含如下生成的动态字段列表:

<% 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规则?

1 个答案:

答案 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) %>