、
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
のアクションが見つかることを試みますHomeController
Admin
エリア内に名前が付けられています。そのアクションがそのエリアに存在しない場合は、エラーが発生します。この領域からリンクを生成する唯一の方法は、明示的に指定することです(area = ""
またはarea = "Foo"
など)。
注:あなたのMVCアプリケーション内の領域を使用していない場合は、area = ""
は効果がありませんし、技術的に削除することができます。要求に渡すルート値がない場合は、null
に設定するか、routeValues
パラメータを持たないオーバーロードを使用します。
現在のページが 'Admin'領域にある場合、' new {area = ""} 'は領域をヌルに設定し、' href = "/ Home/Index" 'を生成します。それがなければ 'href ="/Admin/Home/Index "を生成するでしょう –
同じ構造体を持つように頼まれているので、匿名(現在のもの)の型はRouteDictionaryValueとして使われます:) –
@StephenMuecke領域は何ですか?私はたくさんのことを聞いたが、ネット上で良いソースを見つけることができなかった? – Alex