我正在研究最近这个项目。我找到了以下一行:
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
我对以下内容感到困惑:
new { area = "" }
在msdn上它说它是RouteDictionaryValue
,但我需要详细说明这是什么意思,它有什么作用?
答案 0 :(得分:2)
在这种情况下,
new { area = "" }
匿名类型提供了一种将一组只读属性封装到单个对象中的便捷方法,而无需先显式定义类型。类型名称由编译器生成,在源代码级别不可用。每个属性的类型由编译器推断。
基本上,它被ActionLink
作为类型对象接受,它在运行时传递给RouteValueDictionary
的构造函数,将其转换为UrlHelper
中原生使用的正确类型类。
换句话说,您的ActionLink
:
@Html.ActionLink("Application name", "Index", "Home",
new { area = "" }, new { @class = "navbar-brand" })
相当于:
@Html.ActionLink("Application name", "Index", "Home",
new RouteValueDictionary() {{ "area", "" }},
new Dictionary<string, object>() {{ "class", "navbar-brand" }})
语法较短。
什么是
area
?
呈现视图时,如果ActionLink
中没有提供值route values that are provided in the current request are the defaults。
基本上,Microsoft选择area = ""
作为默认值,因为如果参数设置为null
,则您需要向MVC项目添加Area,然后导航到某个操作在该区域内,生成的链接将是名为Home
的控制器和名为Index
的操作,并且还会从当前请求传入区域名称。
例如,如果您在名为Admin
的区域中请求URL,则生成的链接将不会转到站点根目录的主页,它会尝试查找Index
区域内名为HomeController
的控制器中的Admin
操作。如果该区域中不存在该操作,则会出现错误。从区域生成链接的唯一方法是明确指定(例如area = ""
或area = "Foo"
)。
注意:如果未在MVC应用程序中使用区域,则
area = ""
无效并且技术上可以删除。如果不需要将任何路由值传递给请求,您可以将其设置为null
或使用不具有routeValues
参数的重载。