【问题标题】:Questions about the Razor engine in asp.net mvc 3关于asp.net mvc 3中Razor引擎的问题
【发布时间】:2011-06-12 15:12:50
【问题描述】:

我刚收到几个关于 asp.net mvc 3 的问题。

我正在阅读有关 layouts with razor 的信息。

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

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

    <title>@ViewBag.Title</title>
    

    什么是 ViewBag?我听说它相当于 ViewData。

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

    <title>@View.Title </title>
    

    那么上面的方法是过时的还是另一种方法?

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

  4. 可以在共享文件夹中有_ViewStart.cshtml吗?

  5. 在 aspx 引擎中,您拥有带有内容标签的母版页。 @Sections 似乎等同于它。但是,如果您只需要一个内容标签(即正文),您只需使用@RenderBody?

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

  7. 如果您使用的是 aspx 引擎,则使用 @RenderSection Optional 和在内容标签之间不放置任何内容有什么区别?

  8. 如果您希望 @RenderSection 中的内容存储在局部视图中,会发生什么情况。你还能让它成为可选的吗?

不特定于 asp.net mvc 3

  1. 是否有第三方库有更多的 html 助手?

谢谢

【问题讨论】:

  • 我打算让其他人回答真正的问题,但是telerik 有一些非常好的 mvc 控件/htmlhelpers,如果您有特定的想法,只需创建一个扩展方法。像馅饼一样容易。
  • 是的,这就是我为按钮之类的东西所做的。但我一直在寻找免费的库,这样我就不必在需要时重新发明轮子了。

标签: asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:
  1. 在预发布版本中,ViewBag 被称为View。在 RTM 中,它是ViewBag。 ViewBag 等同于ViewData,唯一的区别在于它依赖于.NET 4.0 动态属性,这意味着您可以编写ViewBag.Title 而不是ViewData["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 助手?

是的,MVCContribWebHelpers,...

必读:ASP.NET MVC 3: Layouts and Sections with Razor

【讨论】:

  • 关于#1,即使你有一个强类型的视图,使用 ViewBag 在视图和它的布局之间传递页面标题之类的东西也是合理的。
  • 标题 - 是的。其他任何事情......你正在推动它:)
  • @Erv,授予标题权限 :-)
  • 有了 WebHelpers,我可以在 VS 2010 中使用吗?看来我需要安装一些其他 IDE 工具。对于问题 8,我的意思是我通常将页脚内容放在它自己的部分视图中,然后将其注入母版页。我想知道他们是一种使其成为可选的方法(无论出于何种原因)。起初我也觉得@RenderSection 可能类似于渲染局部视图。
  • @chobo2,当然,您可以将 VS2010 与 WebHelpers 一起使用,毕竟它是 .NET :-)(WebGrid 示例:weblogs.asp.net/shijuvarghese/archive/2010/10/08/…)。您正在谈论的另一个 IDE 是 WebMatrix。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多