5

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

现在,我们有了“布局页面”的概念,我认为它是 ASPX 视图引擎中“视图大师”的替代品。

但我不明白布局页面的“查看”属性。

这是创建新 Razor 视图时创建的示例:

_Layout.cshtml

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

...

我的视图.cshtml

@model Mvc3FunParty.Models.Post

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

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

这到底是如何工作的?当我将鼠标悬停在“视图”属性上时,它的类型为“动态”。

那么这个属性到底应该用来做什么呢?我们可以在里面塞东西吗?这应该是 ViewData 的 Razor 实现吗?

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

4

2 回答 2

4

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

View.Title

相当于

ViewData["Title"]

这通过使用 .NET 4 中引入的 C# 语言的新“动态”功能来工作。基本上,它允许您使用迄今为止一直是静态类型的语言编写后期绑定代码。如果您想了解更多信息,网络上有大量资源。

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

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

您可以View.Title在视图页面中设置并且在布局页面中显示正确的值的原因是由于 Razor 页面的呈现顺序。我们称之为由内而外的渲染,这意味着你的视图页面首先被执行,它的 HTML 输出被收集到一个缓冲区中,然后布局页面被执行,缓冲的视图页面输出被注入到你调用的地方RenderBody

于 2010-11-10T06:37:31.687 回答
1

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

它转化为

ViewData["Title"]

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

于 2010-11-10T06:06:16.840 回答