c# - ASP.NET MVC 3 RC - Razor "View"属性

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

只是在今天发布的 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/

相关文章:

asp.net-mvc - ASP.NET MVC 模型与选择列表的 ViewData

c# MCRYPT_RIJNDAEL_256 php中的加密解密类

c# - 在 C# 4.0 Winform 中为程序(如 MS Word)仅打开一次文件

c# - 在 Wow6432Node 和普通配置单元中创建注册表

facebook - (OAuthException) (#15) 您调用的方法必须使用应用程序 secret 签名 session 来调用

asp.net-mvc - DropDownListFor 枚举不会绑定(bind)回模型

c# - 我应该在提供文件时设置 Cache-Control header 吗?或不?

ASP.NET MVC3 部分 View 命名约定

ruby-on-rails - 在 View 中访问数据库对象(和其他重要数据)

c# - 存储有关已登录 ASP.NET MVC 用户的附加信息