asp.net mvc中actionline中的routevaluedictionary

时间:2016-06-29 15:23:52

标签: .net asp.net-mvc asp.net-mvc-4

我正在研究最近这个项目。我找到了以下一行:

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

我对以下内容感到困惑:

new { area = "" }

在msdn上它说它是RouteDictionaryValue,但我需要详细说明这是什么意思,它有什么作用?

1 个答案:

答案 0 :(得分:2)

在这种情况下,

new { area = "" }

anonymous type

  

匿名类型提供了一种将一组只读属性封装到单个对象中的便捷方法,而无需先显式定义类型。类型名称由编译器生成,在源代码级别不可用。每个属性的类型由编译器推断。

基本上,它被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参数的重载。