2016-06-29 4 views
0

私は最近このプロジェクトに取り組んでいます。そして、私は次の行が見つかりました:asp.net mvcのactionlineのroutevaluedictionary

@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 

を、私は、次のについて少し混乱しています:MSDNの

new { area = "" } 

それはそのRouteDictionaryValueを言いますが、私は、この平均値を何詳述し、それが何をするのか必要ですか?この場合

+1

現在のページが 'Admin'領域にある場合、' new {area = ""} 'は領域をヌルに設定し、' href = "/ Home/Index" 'を生成します。それがなければ 'href ="/Admin/Home/Index "を生成するでしょう –

+0

同じ構造体を持つように頼まれているので、匿名(現在のもの)の型はRouteDictionaryValueとして使われます:) –

+0

@StephenMuecke領域は何ですか?私はたくさんのことを聞いたが、ネット上で良いソースを見つけることができなかった? – Alex

答えて

2

new { area = "" } 

anonymous typeあります。

匿名型は、型を最初に明示的に定義することなく、読み取り専用プロパティのセットを単一のオブジェクトにカプセル化する便利な方法を提供します。型名はコンパイラによって生成され、ソースコードレベルでは使用できません。各プロパティの型は、コンパイラによって推論されます。

基本的に、それがUrlHelperクラスでネイティブに使用される適切な型に変換し、実行時にRouteValueDictionaryのコンストラクタに渡されるタイプオブジェクトとしてActionLinkに受け入れられています。言い換えれば

、あなたのActionLink:短い構文で

@Html.ActionLink("Application name", "Index", "Home", 
    new RouteValueDictionary() {{ "area", "" }}, 
    new Dictionary<string, object>() {{ "class", "navbar-brand" }}) 

@Html.ActionLink("Application name", "Index", "Home", 
    new { area = "" }, new { @class = "navbar-brand" }) 

は同等です。

areaとは何ですか?ビューがレンダリングさ

、値がActionLinkに設けられていない場合route values that are provided in the current request are the defaults。パラメータが代わりにnullに設定された場合、あなたはMVCプロジェクトにAreaを追加し、そのエリア内のアクションにナビゲートし、生​​成されたリンクはになりましたので

は基本的に、マイクロソフトは、デフォルト値としてarea = ""を選びましたコントローラHomeという名前のアクションとIndexという名前のアクションと、現在のリクエストからというエリア名を渡します。

たとえば、Adminという名前の領域にURLを要求していた場合、生成されたリンクはサイトのルートのホームページには移動せず、コントローラでIndexのアクションが見つかることを試みますHomeControllerAdminエリア内に名前が付けられています。そのアクションがそのエリアに存在しない場合は、エラーが発生します。この領域からリンクを生成する唯一の方法は、明示的に指定することです(area = ""またはarea = "Foo"など)。

注:あなたのMVCアプリケーション内の領域を使用していない場合は、area = ""は効果がありませんし、技術的に削除することができます。要求に渡すルート値がない場合は、nullに設定するか、routeValuesパラメータを持たないオーバーロードを使用します。

+0

地域とは何か情報を追加できますか? – Alex

+0

答えを更新しました。ありがとう。 – NightOwl888

+0

私はエリアを作成することはできますか? – Alex