我正在做一个关于 MVC 3 的教程,我偶然发现了助手 @Html.ActionLink(genre.Name, "Browse", new {genre =genre.Name})。
现在我明白了这些值的作用,第三个值是一个路由参数值,但这是我第一次看到这种语法,由于某种原因真的让我很烦。
我的意思是new {genre =genre.Name}。我开始明白“new”在对象/类型声明之前,但是,这一次它只是“new”关键字和大括号。这具体是如何处理的?
我正在做一个关于 MVC 3 的教程,我偶然发现了助手 @Html.ActionLink(genre.Name, "Browse", new {genre =genre.Name})。
现在我明白了这些值的作用,第三个值是一个路由参数值,但这是我第一次看到这种语法,由于某种原因真的让我很烦。
我的意思是new {genre =genre.Name}。我开始明白“new”在对象/类型声明之前,但是,这一次它只是“new”关键字和大括号。这具体是如何处理的?
该语法new { prop = val }
创建了一个匿名类型。它本质上与创建类的实例相同,只是您一次性声明了类和实例。有些人认为匿名类型不是静态类型的,也不是类型安全的。这不是真的。属性的类型是从它们分配的值中推断出来的。这种结构在 MVC 和 linq 中经常使用。
请注意,此语法并非特定于 MVC。您可以在任何方便的地方使用它。我在日常编码中大量使用匿名类型。
很简单。。第一个参数就是你要显示的链接,所以genre.Name
can 对应Rock。第二个参数是action
,第三个参数是你的Controller类。最后一个参数是匿名对象形式的路由值(您将永远不会再次使用的对象,MVC 引擎在这种情况下使用匿名对象)。所以你的action
(方法)需要一个string
论点。
例如:“Home”是用户看到的链接(第一个参数),Home(第二个参数)是action
你的类的(方法)Controller
,它需要一个string
参数。
class HomeController
{
public ActionResult GenreAction(string genre)
{
}
}
当一个请求发出时,它变成Home/GenreAction/genre
这是一个名为Anonymous Type的 C# 语言功能,如果我没记错的话,它是在 C# 3.5 中引入的。