Лямбда в Html.ActionLink с помощью бритвы - PullRequest
1 голос
/ 08 февраля 2011

Как правильно использовать Lambda в ActionLink?
Я пытаюсь это:

 @Html.ActionLink(item.PageName, "ContentPage", new { id = item.PageName }, new { @title = item.ToolTip, item.Selected == 1 ? "class=selected" : "" })

но по какой-то причине выдается ошибка, я не могу определить правильный синтаксис для нее?
Спасибо

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Я не знаю ActionLink, но кажется, что в этом фрагменте кода:

 new { @title = item.ToolTip, item.Selected == 1 ? "class=selected" : "" }

вы объявляете анонимный тип, причем первое поле называется "@title", но ... второе?!? Здесь мы видим выражение с троичным оператором, но его возвращаемое значение ни к чему не привязано. Вы должны добавить идентификатор и оператор присваивания перед "item.Selected":

 new { @title = item.ToolTip, class = item.Selected == 1 ? "selected" : "" }

Если значение class = "" недопустимо, вы можете попытаться поместить весь объект в троичный оператор, например так:

 item.Selected == 1 ? new { @title = ... } : new { @title = ..., class = "selected" }

Но, вероятно, это не сработает: троичный оператор не сможет определить тип результата (два анонимных типа имеют разную сигнатуру). Единственный другой способ - сначала создать экземпляр правого анонимного объекта, используя тип «var», а затем передать его методу. В любом случае здесь нет лямбда-выражений. Вы должны пометить свой ответ «анонимными типами» вместо «лямбда».

0 голосов
/ 09 февраля 2011

Вы пробовали:

@Html.ActionLink(item.PageName,"ContentPage",new { id = item.PageName },new { @title = item.ToolTip, selected = (item.Selected == 1) ? "class=selected" : "" })

(вам не хватало имени свойства HTML).

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

...