2008-10-13 84 views
7

在ASP.NET的視圖引擎/模板ASPX/ashx的頁面吐到屏幕的方式似乎是:微軟MVC「回聲/打印/輸出」等

<%= Person.Name %> 

這是很好用的WebForms爲很多的模型數據必然以編程方式控制。但是對於MVC,我們現在更習慣使用這種語法。

我與它有關的問題是相當微不足道的,但惱人的任何一種方式。這是它似乎打破了標記,即:

<% foreach(var Person in People) { %> 
    <%= Person.Name %> 
<% } %> 

這似乎很多開放和結束標籤給我!在MVC的contrib

其他視圖引擎具有吐出與出開口來篩選和關閉使用標準關鍵字腳本標記如的手段「打印,走出,回聲」,即(抄網示例):

<% 
for element in list: 
     output "<li>${element}</li>" 
end 
%> 

現在,我說這可能看起來微不足道,但它看起來更具可讀性。那麼MS具有這種語法的優點是什麼,而不是提供輸出方法?

乾杯,克里斯。

回答

11

考慮這樣的事情,而不是:

<% foreach(var Person in People) { 
    Response.Write(Person.Name); 
} %> 

我相信會工作。 (雖然我沒有測試它,我纔剛剛開始與MVC和沒有在這裏有工具集在辦公室。)

編輯:我錯過了明顯的實際問題... :)

Microsoft確實提供了一種輸出方法,但沒有提供類似於您所描述的語法的語法。輸出方法是Response.Write()。我不能直接回答這個問題(我相信你需要和Scott Hanselmann一起在MS上檢查:)),但我認爲他們不希望通過添加另一種語言讓我們學習而使腳本複雜化;我認爲他們想利用開發人員已經知道的語言(C#,VB等)。

編輯#2:我在評論中放置了以下內容,回想起來(爲了完整性),它應該是答案的一部分。

如果你頭部到Learn MVC site on ASP.NET,在視圖教程(這是鏈接),你會看到以下內容:

既然你叫Response.Write()所以 通常,微軟提供了一個 用於調用 Response.Write()方法的快捷方式。 中的視圖清單3使用分隔符<%=%>作爲撥打 Response.Write()的快捷方式。

從本質上講,<%= %>Response.Write接受的快捷方式,因此您可以使用完整的Response.Write方法的任何地方,你會使用<%= %>

+0

完美的作品。 – 2008-10-13 14:05:34

+1

雖然,在Response.Write聲明結尾處需要一個分號。 – 2008-10-13 14:07:50

+0

我的不好!我會再次更新。 :) – 2008-10-13 14:08:20

0

你正在尋找的可能是一個不同的視圖引擎 - 它們每個都以自己的方式處理嵌入的代碼。檢查出NHaml,Rails的Haml引擎的ASP.Net端口。

一些更視圖引擎來看待:BrailNVelocity

0

謝謝你們,我不特別要切換視圖引擎,但我需要時間來看看其他avaliable。我相信你可以理解大多數MS開發公司不會觸摸除MS品牌的技術之外的任何東西,所以我只想知道是否有方法使用默認視圖引擎來完成此操作。如果不是,爲什麼不呢?是否有一個原因,如果不是我在哪裏可以建議默認視圖編譯器添加這樣的關鍵工作。

John-我相信Response.Write(Person.Name)只會在任何其他輸出之前將字符串呈現到頁面的頂部。雖然不是100%,但生病了吧。

編輯:

顯然,回覆於(Person.Name)工作的建議。那很容易。謝謝:-)約翰。

+0

檢查http://www.asp.net/learn/mvc/tutorial-04-cs.aspx。 <%= %>是Response.Write的快捷方式。 – 2008-10-13 14:10:38

0

我聽說他們正在通過客戶端模板來改進ASP.Net 4。

0

比其他的Response.Write另一個選擇是我的答案是基於個人XP時MVC4 CSHTML與XSL transformations

1

寫XHTML - 您可以使用: @Html.Raw("SomeStringDirectlyInsideTheBrowserPageHTMLCode")

這使得(動態)字符串在它的位置,不像Response.Write(MyString),據我所知,總是呈現在瀏覽器頁面開始的字符串。

請注意,編譯器無法檢查由@Html.Raw(MyString)呈現的HTML標記。我的意思是:@ Html.Raw(「< div .... >」)不能僅僅由於</div >而關閉,因爲你會得到一個錯誤(< div .... >未被編譯器檢測到),所以你必須用@ Html.Raw關閉標籤(「</div >」)

PS
在某些情況下,這不起作用(例如,它在DevExpress中失敗) - 使用ViewContext.Writer.Write()ViewContext.Writer.WriteLine()代替。