2011-02-08 30 views
1

アクションリンクでラムダを使う正しい方法は何ですか?私はこれをしようとしている
ラムダを使ったHtml.ActionLinkのラムダ

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

が、いくつかの理由でエラーが出ます、私はそれのための正しい構文を把握することはできませんか?
おかげ

+0

コード内にラムダは実際にはありません。どのようなエラーが表示されているのかを明確にすることはできますか? – marcind

答えて

1

私はActionLinkのを知っているが、コードのこの部分ではと思われていない:

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

あなたが「@title」という名前の最初のフィールドwhith、anonimusタイプを宣言しているが、... .. 二番目?!?ここでは、三項演算子を使った式を見ていますが、戻り値は何にも割り当てられていません。 あなたが「item.Selected」の前に、識別子とassignement演算子を追加する必要があります。

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

クラスの値は=「」有効ではありません、あなたは三項演算子でオブジェクト全体を置くことができますしようとすることができれば、このような:

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

しかし、おそらくこれは動作しません:三項演算子は、(2 anonimousタイプが異なるシグネチャを持つ)結果の型を決定することができません。 「var」型を使用して、まず最初に右の異例のオブジェクトをインスタンス化し、それをmetodに渡すだけです。 いずれにしても、ここにラムダ式はありません。あなたは "ラムダ"の代わりに "匿名型"であなたの答えをタグ付けする必要があります。

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

を(あなたがHTMLのプロパティ名を欠落していた):

+0

ありがとう、最終的に何が欠けていたのは、単語クラスの前に "@"でした。 – idekkers

+0

@idekkers:コードの最終版を投稿できますか? '' class = selected "'の '@'だけが欠落していたかどうか、あるいは '@class = item.Selected?[...]' – BertuPG

0

は、あなたがしようとしています。

これは、ラムダではなく新しい匿名型の構文です。ジェネリック型のラムダでは、ステートメントの周りに余分な括弧をラップする必要があります。