【问题标题】:razor views in asp.net web projectasp.net web 项目中的剃刀视图
【发布时间】:2011-12-29 02:32:19
【问题描述】:

我目前正在研究视图引擎,而 Razor Views 对我来说变得非常有趣。我正在开发一个 asp.net 4.0 网络表单应用程序。 Razor 从我能找到的示例中查看主要与 MVC 应用程序有关的示例。

是否可以将 Razor 视图集成到 Web 表单应用程序中?这样做有好处吗?我希望这样做的主要原因是为我的应用程序架构创建一个新层,并可能创建一个可以测试的新区域。

【问题讨论】:

  • Razor 擅长让您在 HTML 中散布 C# 代码。 WebForms 擅长(如它所做的那样)使用带有自定义“标签”的 XML,这些自定义“标签”会转化为与 HTML 一起生成最终纯 HTML 结果的服务器端控件。您在 WebForms 世界中使用 Razor 的动机是什么——您可以预见到哪些优势?
  • @kirk razor 是一种很好的将代码与 html 混合的语法,许多设计师/Web 开发人员对此表示赞赏。它可能是降低喜欢 Razor 语法的人维护现有 WebForms 应用程序门槛的完美方式。
  • @Pauli,你并没有真正解决我的观点。使用 WebForms 时,重点是您不应该在代码前端合并 C# 代码
  • @KirkWoll 而您正是根据什么来构建该声明?我知道大量的开发人员讨厌 标签,只想做简单的 for 循环和 if 语句,他们非常受欢迎。我知道 WebForms 主要是关于 WebPages 没有的控制树、事件和回发,但开发就是使用最能完成工作的工具,如果大型 WebForms 应用程序的一小部分最好由一些人维护更喜欢 Razor,那么这就是你应该做的!
  • @Pauli,但您描述的是 ASP.NET/MVC。为什么你自己承认的 WebForms 功能“主要是关于控制树、事件和回发”。如果我不认为你的问题是不诚实的,“你的陈述究竟是基于什么?”我会向您指出 MSDN 官方文档的分数,这些文档解释了他们认为您应该如何开发 WebForms 应用程序——相信我,这不是您所描述的世界。

标签: c# asp.net razor views


【解决方案1】:

当然可以!通过使用来自 Microsoft 的 WebPages project,您可以像通常加载 UserControl 一样加载剃须刀类,方法是提供类/剃须刀文件的路径。你得到的是一个WebPage 的实例,你可以执行它,它会给你一个字符串,你可以在你的页面上打印出来。

我自己完成了这个,实现了Razor functionality for Composite C1 CMS,它的源代码可以从http://compositec1contrib.codeplex.com/免费获得。我将在这里强调重要的部分。

确保您在 web.config 中注册了 .cshtml 文件的构建提供程序

确保您有必要的 system.web.webPages.razor 配置设置

var webPage = WebPage.CreateInstanceFromVirtualPath(_relativeFilePath); (see doc) 一样实例化一个 .cshtml 文件的实例

这样获取 Razor 类的输出

var httpContext = new HttpContextWrapper(HttpContext.Current);
var pageContext = new WebPageContext(httpContext, webPage, null);

var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
{
   webPage.ExecutePageHierarchy(pageContext, writer);
}

string output = sb.ToString();

只需在您的 WebForms 页面上输出字符串

【讨论】:

  • 您可以将 Razor 视图集成到 Web 应用程序中,但不容易集成到现有的 WebForm 中。换句话说,您可以拥有一个同时包含 Web 表单页面和 Razor 页面的 Web 应用程序,但是让 Web 表单包含 Razor 部分要复杂得多。 @klabranche 提供了一个来自 Hanselman 的关于这个主题的很好的链接。
  • @kingdango 因为所有 Razor 类最终都只输出字符串,这非常有意义,并且非常容易在 WebForms 应用程序的任何给定位置实例化、执行和编写 Razor 类的输出.
  • Ostero 我喜欢 Razor 因为它的灵活性!
  • @kingdango 我喜欢 Razor,因为它有很好的语法,但我 喜欢 asp.net 因为它的灵活性:)
  • 我只是喜欢对每条评论都独善其身……我很想看看未来会发生什么。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
相关资源
最近更新 更多