ASP.NET MVC 2 строго типизированный htmlhelper, индексы - PullRequest
3 голосов
/ 19 января 2010
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.

Это приводит к проблемам в случае, если я хочу добавить метку для каждого флажка (поскольку все идентификаторы одинаковы).

Есть идеи, как с этим справиться?


Из источника 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;
            }
        }

Ответы [ 2 ]

1 голос
/ 26 января 2010

Способность помощников на основе выражений понимать индексы пока отсутствует в продукте. Это будет в следующем предварительном выпуске (что будет после MVC 2 RC). Смотри http://aspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=4970.

0 голосов
/ 19 января 2010

Используйте перегрузку CheckBoxFor, которая позволяет указывать атрибуты html:

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

Например,

${Html.CheckBoxFor(x => x[fIndex].Checked, new { id = "foo" + fIndex) })}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...