2010-05-20 73 views
0

我的网页形式包含了像这样生成的动态字段列表:猜测自动生成的ID

<% 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> 

如何避免内置asp.net的MVC硬编码规则ID生成?

回答

1

你可以做到这一点使用editor templates - 没有更多的魔法字符串:

<%= Html.EditorFor(x => x.Options) %> 

然后你把一个Option.ascxViews/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) %> 
+0

有趣。我会仔细看看。谢谢。 – 2010-05-20 16:10:47