ASP.NET MVC 2强类型化htmlhelper,索引

时间:2010-01-19 11:55:39

标签: asp.net-mvc asp.net-mvc-2

public class Foo { public bool Checked {get;set;}}

查看:

<viewdata model="Foo[] fooList" />
<for each="var f in fooList">
    ${Html.CheckBoxFor(x=>x[fIndex].Checked)}
</for>

将输出:

<input id="Checked" name="Checked" type="checkbox" value="true" />
<input name="Checked" type="hidden" value="false" />

<input id="Checked" name="Checked" type="checkbox" value="true" />
<input name="Checked" type="hidden" value="false" />

<input id="Checked" name="Checked" type="checkbox" value="true" />
<input name="Checked" type="hidden" value="false" />

问题是System.Web.Mvc.ExpressionHelper.GetExpressionText不包含id / name中的索引。

如果我想为每个复选框添加标签(因为所有id都相同),这会导致问题。

任何想法如何妥善处理?


来自MVC来源=&gt;

 while (part != null) {
            if (part.NodeType == System.Linq.Expressions.ExpressionType.MemberAccess) {
                MemberExpression memberExpressionPart = (MemberExpression)part;
                nameParts.Push(memberExpressionPart.Member.Name);
                part = memberExpressionPart.Expression;
            }
            else {
                //arghhhh... [index] != MemberAccess :(
                break;
            }
        }

2 个答案:

答案 0 :(得分:1)

基于表达式的帮助程序理解索引的能力尚未在产品中。它将在下一个预览版中(无论是在MVC 2 RC之后发布的)。请参阅http://aspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=4970

答案 1 :(得分:0)

使用允许您指定html属性的CheckBoxFor重载:

CheckBoxFor(TModel)(HtmlHelper(TModel), Expression(Func(TModel, Boolean)), IDictionary(String, Object))

例如,

${Html.CheckBoxFor(x => x[fIndex].Checked, new { id = "foo" + fIndex) })}