ASP.NET MVC 3 RC - Razor“查看”属性

时间:2010-11-10 05:55:56

标签: c# asp.net-mvc-3 viewdata razor

在今天发布的ASP.NET MVC 3 RC中使用Razor。

现在,我们有一个“布局页面”的概念,我认为它取代了ASPX视图引擎中的“View Master”。

但是我不理解布局页面的“视图”属性。

以下是创建新Razor View时创建的示例:

_Layout.cshtml

<html>
<head>
   <title>@View.Title</title>

...

MyView.cshtml

@model Mvc3FunParty.Models.Post

@{
   View.Title = "Some Title";
   Layout = "~/Views/Shared/_Layout.cshtml";
}

这导致“某些标题”被插入到呈现的HTML的<title>标记中。

这究竟如何运作?当我将鼠标悬停在“查看”属性上时,它的类型为“动态”。

那么这个属性究竟应该用于什么? 我们可以在那里塞东西吗?这应该是ViewData的Razor实现吗?

如果是这样,它不应该是“ ViewDataDictionary ”类型吗?为什么View属性的“动态”类型?

2 个答案:

答案 0 :(得分:4)

View属性是ViewData属性的别名。这意味着以下代码

View.Title

相当于

ViewData["Title"]

这可以通过使用.NET 4中引入的C#语言的新“动态”特性来实现。基本上它允许您编写后期绑定代码,直到现在已经是静态类型语言。如果您想了解更多信息,网络上有大量资源。

ViewData属性仍然可用,您可以互相使用。它们都使用相同的后备存储,因此以一种方式进行的更改将以另一种方式提供。

使用View的优点是语法更简洁。缺点是您没有获得IntelliSense支持。

您可以在视图页面中设置View.Title并在布局页面中显示正确值的原因是由于Razor页面的渲染顺序。我们将其称为内向外渲染,这意味着首先执行视图页面,将HTML输出收集到缓冲区中,然后执行布局页面,并在调用{{1}的地方注入缓冲的视图页面输出}。

答案 1 :(得分:1)

是的,“查看”确实是ViewData,他们正在使用dynamic,以便拥有您所看到的语法(View.Title

转换为

ViewData["Title"]

MVC中有很多像这样的小块,特别是在MVC 3中会让你感到困惑:)。