2011-03-10 56 views

回答

44

我們(ASP.NET團隊)目前沒有計劃使用Razor語法來支持WebForms頁面模型。此外,我們不太可能認真考慮這一點,因爲這兩種模式太過不同,無法將兩者結合在一起。

+0

那麼這意味着什麼**您可以在基於Web表單的應用程序中使用.cshtml/.vbhtml文件。敬請期待。** http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx#7553469? – Programista 2011-04-29 21:38:30

+0

目前還沒有這樣的計劃。您可以擁有經典的WebForms應用程序並向其中添加Razor文件,但它們不能具有諸如「'」之類的控件。 – marcind 2011-04-30 03:06:49

4

您可以使用可從Codeplex獲得的RazorEngine集成它。它允許你在MVC之外處理剃鬚刀。儘管你沒有從MVC版本的Razor獲得所有的功能,例如@Html@Url等。

+0

嘿,我想。 :)只是覺得他問如何使用mvc以外的剃鬚刀 - 但你的答案更有意義。 – Buildstarted 2011-03-10 20:22:07

27

您可以使用沒有MVC的Razor頁面;這被稱爲ASP.Net WebPages。

只需將.CSHTML文件添加到正常的ASP.Net 4.0項目。

explained how this works在我的博客。

+1

當然,您可以創建.CSHTML或.VBHTML文件,但問題是Razor語法是否可以(或將會)在* .ASPX頁面中使用。 – cpuguru 2011-03-10 20:26:02

+0

@cpuguru:當然不是。這沒有任何意義。您不能(通常)在一個文件中使用兩種競爭語言。 – SLaks 2011-03-10 20:31:30

+2

我以爲Razor是一種語法(不是語言)? – cpuguru 2011-03-10 20:57:43

1

我敢說微軟已經考慮過了,但在這個問題上沒有官方的說法。由於您不應該在ASPX文件中使用C#或VB代碼,因此您不得不想要向Web窗體添加Razor支持。後面的代碼仍然是一個(部分)類文件。你不會把Razor放在網頁或MVC的類文件中。並且交換服務器控件和Html Helpers的所有良好的聲明性內容可以消除去Web窗體路線IMO的關鍵原因之一。

+1

@ SomeControl.ClientID而不是<%= SomeControl.ClientID%>似乎是在webforms中需要razor的一個很好的理由。 – Arshia001 2016-02-02 07:47:26

1

這真的不是那麼難做到。現在正在處理它。從CodePlex獲取RazorEngine。它允許您在運行時將Razor cshtml/vbhtml文件編譯到類中。

然後,您可以採用該類,並使用它的Render方法中的ASP.Net服務器控件。這是將HTML從服務器控件的主體中取出的好方法。非常清潔。

現在,您還可以添加一些可以從Razor調用的方法。例如,添加像RenderChild這樣的東西。此外,您可以將服務器控件本身設置爲Razor可用的模型。然後你可以調用服務器控件。包括做一些事情,比如抓住它的一個子控件並調用Render。

相關問題