【发布时间】:2026-02-21 02:00:01
【问题描述】:
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 源=>
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;
}
}
【问题讨论】: