有关asp.net mvc 3中Razor引擎的问题

cho*_*bo2 2 asp.net-mvc razor asp.net-mvc-3

我刚刚有几个关于asp.net mvc 3的问题.

我正在阅读有关剃刀的布局.

所以我认为这篇文章来自预览1,我正在使用3.0的最终版本.

  1. 当我创建一个3.0项目并查看_Layout.cshtml时

    <title>@ViewBag.Title</title>
    
    Run Code Online (Sandbox Code Playgroud)

    什么是ViewBag?我听说它就像ViewData一样.

  2. 如果我听到的是对的,为什么他们这样使用它?在我列出的文章中,他们使用了

    <title>@View.Title </title>
    
    Run Code Online (Sandbox Code Playgroud)

    以上是过时的还是不同的做法?

  3. 使用_ViewStart.cshtml,如果您将其中一个放在共享文件夹中,然后将其中一个放在主视图文件夹中.家庭观点中的一个将胜过共享的一个?

  4. 你能在共享文件夹中有_ViewStart.cshtml吗?

  5. 在aspx引擎中,您拥有包含内容标记的母版页.@Sections似乎相当于它.但是,如果您只需要一个内容标记(即身体),您只需使用@RenderBody?

  6. @RenderPage用于加载部分视图还是用于不同的东西?

  7. 使用@RenderSection可选有什么不同,如果你使用的是aspx引擎,那么就不要在内容标签之间放任何东西?

  8. 如果您希望@RenderSection中的内容存储在局部视图中,会发生什么.你还可以选择它吗?

不是特定于asp.net mvc 3

  1. 是否有第三方图书馆有更多的HTML助手?

谢谢

Dar*_*rov 5

  1. 在预发布版本中ViewBag被调用View.在RTM中它是ViewBag.ViewBag相当于ViewData唯一的区别在于它依赖于.NET 4.0动态属性,这意味着它不是ViewData["Title"]你可以编写的ViewBag.Title.这就是说你不应该使用这些,但有强烈类型的视图.

  2. 它已过时,无法在ASP.NET MVC 3 RTM中编译

  3. 这取决于您是在@RenderBody()调用
    _ViewStart执行之前或之前将其放在正在呈现的主视图的文件夹结构中.如果在Home文件夹中找到视图,则将执行Home\_ViewStart.如果在共享文件夹中找到视图,则将执行Shared\_ViewStart.


  4. 是,但只有在正在执行的视图位于"共享"文件夹中时才会执行.

  5. @RenderPage@Html.Partial允许您包含局部视图相同.这是个人喜好的问题.它来自WebPages,而Html.Partial是一种自MVC早期版本以来一直存在的扩展方法.
    澄清:在MVC中你应该只使用@Html.Partial它,因为它经历了解析视图等所有MVC步骤

  6. 如果某个部分是可选的,则无需在内容页面中对其进行定义.与在aspx视图引擎中放置空内容相同.

  7. ???

是否有第三方图书馆有更多的HTML助手?

是的,MVCContrib,WebHelpers,......

必读:ASP.NET MVC 3:使用Razor进行布局和部分