2011-02-08 159 views
1

什么是一个ActionLink的使用LAMBDA正确的方法是什么?
我想这一点:LAMBDA在Html.ActionLink使用剃刀

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

但得到一个错误出于某种原因,我无法弄清楚它的正确语法?
感谢

+0

你实际上并不在你的代码有拉姆达的任何地方。你能否澄清你所看到的错误? – marcind 2011-02-08 17:51:20

回答

1

我不知道ActionLink的,但目前看来,在这一段代码:

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

您声明的anonimus类型,蒙山名为“@title”第一场,但.. .. 第二?!?在这里我们看到一个带有三元运算符的表达式,但是它的返回值没有分配给任何东西。 你有“item.Selected”前添加标识符和assignement操作:

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

如果类的值=“”是无效的,你可以尝试可以把整个对象三元运算符,像这样:

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

但可能这是行不通的:三元运算符将无法确定结果类型(两个anonimous类型有不同的签名)。 唯一的另一种方法是先使用“var”类型首先实例化正确的anonimous对象,然后将其传递给metod。 在任何情况下,这里都没有lambda表达式。你应该用“annoimous types”而不是“lambda”来标记你的答案。

+0

感谢,到底少了什么是“@”字课前 – idekkers 2011-02-10 08:32:45

0

你试过:

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

(你缺少HTML属性名)。

这是新的匿名类型语法,而不是lambas,与您必须包装一组额外的绕声明括号的泛型类型的lambda表达式。