我们可以在 ASP.NET Webforms(*.aspx 页面)中使用 Razor 语法吗?

Posted

技术标签:

【中文标题】我们可以在 ASP.NET Webforms(*.aspx 页面)中使用 Razor 语法吗?【英文标题】:Can we use Razor syntax in ASP.NET Webforms (*.aspx pages)? 【发布时间】:2011-07-12 23:59:13 【问题描述】:

我喜欢 Microsoft 为 WebMatrix 产品 (http://en.wikipedia.org/wiki/Microsoft_WebMatrix) 中的内联编码开发的 Razor 语法。

既然 Visual Studio SP1 具有 RTM,是否可以(和/或计划)在 ASP.NET Webforms 中启用 Razor 语法?

【问题讨论】:

【参考方案1】:

您可以使用Codeplex 提供的 RazorEngine 集成它。它允许您在 MVC 之外处理剃刀。尽管您无法获得从 MVC 版本的 Razor 获得的所有功能,例如 @html@Url 等。

【讨论】:

嘿,我猜。 :) 只是觉得他在问如何在 mvc 之外使用 razor - 但你的回答更有意义。【参考方案2】:

您可以在没有 MVC 的情况下使用 Razor 页面;这称为 ASP.Net WebPages。

只需将 .CSHTML 文件添加到普通的 ASP.Net 4.0 项目中即可。

我在我的博客中explained how this works。

【讨论】:

当然,您可以创建 .CSHTML 或 .VBHTML 文件,但问题是 Razor 语法是否可以(或将会)在 *.ASPX 页面中使用。 @cpuguru:当然不是。那没有任何意义。您不能(通常)在一个文件中使用两种相互竞争的语言。 我认为 Razor 是一种语法(不是语言)? 喜欢你博客上的解释。感谢您提供链接,它帮助我更好地理解了 Razor。 不同之处在于C#的词法语法没有以任何有意义的方式改变。只有语法流......如果语法如此不同以至于你不得不重新学习标记化,它就不再是同一种语言了。只是我的 0.02 美元,也许其他人的观点比这更好。【参考方案3】:

我敢说微软已经考虑过了,但没有关于这个问题的官方消息。由于您不应该在 ASPX 文件中包含 C# 或 VB 代码,因此您必须想知道将 Razor 支持添加到 Web 窗体的意义。后面的代码仍然是(部分)类文件。你不会把 Razor 放在那里,就像你不会把它放在网页或 MVC 中的类文件中一样。并且将服务器控件和所有好的声明性内容替换为 Html Helpers 消除了采用 Web 表单路线的关键原因之一,IMO。

【讨论】:

@SomeControl.ClientID 而不是 似乎是希望在网络表单中使用剃须刀的好理由。【参考方案4】:

我们(ASP.NET 团队)目前没有计划支持使用 Razor 语法的 WebForms 页面模型。此外,我们不太可能认真考虑这一点,因为模型差异太大,无法使两者一起工作。

【讨论】:

那么这意味着什么您也可以在基于 Web 表单的应用程序中使用 .cshtml/.vbhtml 文件。请继续关注。 weblogs.asp.net/scottgu/archive/2010/07/02/… ? 目前还没有这样的计划。您可以拥有一个经典的 WebForms 应用程序并向其添加 Razor 文件,但它们不能具有诸如 <asp:GridView runat="server"/> 之类的控件。【参考方案5】:

这真的不难做到。现在正在处理它。从 CodePlex 获取 RazorEngine。它允许您在运行时将 Razor cshtml/vbhtml 文件编译成一个类。

然后,您可以获取该类,并在其 Render 方法中从 ASP.Net 服务器控件中使用它。这是从服务器控件主体中获取 HTML 的好方法。干净多了。

现在,您还可以添加一些可以从 Razor 调用的方法。例如,添加类似 RenderChild 的东西。此外,您可以将服务器控件本身设置为 Razor 可用的模型。然后您可以调用服务器控件。包括执行诸如抓取其中一个子控件并调用 Render 之类的操作。

【讨论】:

以上是关于我们可以在 ASP.NET Webforms(*.aspx 页面)中使用 Razor 语法吗?的主要内容,如果未能解决你的问题,请参考以下文章

正确使用 asp.net webforms 生命周期

asp.net webforms ajax 更新gridview

将 ASP.Net MVC 与 WebForms 相结合

如何将 Perl 与 ASP.NET Webforms 集成?

在 ASP.NET Webforms 中启用跨域请求

一个简单的ASP.NET Web Forms应用程序