只是在今天发布的 ASP.NET MVC 3 RC 中使用 Razor。
现在,我们有了“布局页面”的概念,我认为它是 ASPX View 引擎中“View Master”的替代品。
但是我不明白布局页面的“View”属性。
这是创建新 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";
}
这导致“Some Title”被插入到 <title>
中呈现的 HTML 的标记。
这究竟是如何运作的?当我将鼠标悬停在“View”属性上时,它的类型为“dynamic”。
那么这个属性究竟应该用来做什么呢? 我们可以在里面塞东西吗?这应该是 ViewData 的 Razor 实现吗?
如果是这样,它不应该是“ViewDataDictionary”类型吗?为什么 View 属性的“动态”类型?
最佳答案
View
属性是 ViewData
属性的别名。也就是说下面的代码
View.Title
相当于
ViewData["Title"]
这通过使用 .NET 4 中引入的 C# 语言的新“动态”功能来实现。基本上,它允许您使用迄今为止静态类型的语言编写后期绑定(bind)代码。如果您想了解更多信息,网上有很多资源。
ViewData
属性仍然可用,您可以交替使用两者。它们都使用相同的后备存储,因此以一种方式所做的更改将以另一种方式可用。
使用View
的好处是语法更简洁。缺点是您没有获得 IntelliSense 支持。
之所以可以在 View 页面中设置 View.Title
并在布局页面中显示正确的值,是因为 Razor 页面的呈现顺序。我们称之为由内而外的渲染,这意味着您的 View 页面首先被执行,它的 HTML 输出被收集到缓冲区中,然后布局页面被执行,缓冲的 View 页面输出被注入(inject)到您调用 RenderBody 的地方
。
关于c# - ASP.NET MVC 3 RC - Razor "View"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4141631/