這可能是一個錯誤。重現步驟:ASP.NET MVC的HTML作家的錯誤?
(1)創建ASP.NET MVC 3項目(ASPX視圖引擎)
(2)進入Models文件夾,並創建一個新的簡單的模型
namespace MvcApp.Models
{
public class MyModel
{
public static string MyString = "foo";
}
}
( 3)修改web.config
文件,添加模型的名稱空間,以便您可以在視圖中使用模型。
....
</controls>
<namespaces>
<add namespace="MvcApp.Models" />
</namespaces>
</pages>
</system.web>
(4)轉到/Shared/Site.Master
,修改<head>
部。
<head runat="server">
<title><%: MyModel.MyString %><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
<link href="<%: MyModel.MyString %>" rel="<%: MyModel.MyString %>" />
<script src="<%: MyModel.MyString %>" />
</head>
注runat="server"
頭的屬性。
(5)運行它,並查看頁面的源代碼。我想你會得到(不必要的空格被刪除):
<head id="Head1">
<title>foo Index</title>
<link href="<%: MyModel.MyString %>" rel="<%: MyModel.MyString %>" />
<script src="foo" />
</head>
一件趣事:
一個。 link
標記的所有屬性未被正確評估。它看起來像被編碼?而title
和script
中的表達式是正確的。
b。第3行改成這樣:
<link href="<%: MyModel.MyString %>" rel="<%: string.Format("{0}", "foo") %>" />
OR
<link href="<%: MyModel.MyString %>" rel="<%: "foo" %>" />
你會得到一切正確的(甚至href
是正確的!)。
c。 head
沒有runat="server"
總是正確的。
我認爲這是將視圖呈現給html文本時的錯誤。檢查源代碼並嘗試查找錯誤真的是一場噩夢。誰能告訴我理由?
更多,我認爲這是一個不相關的問題 - 如果它可以永遠根本沒有考慮到問題。爲什麼要堅持使用aspx語法和「runat = server」這些東西,這些東西是webforms的遺留物,當我們爲Mvc設計本地Razor時,並且在每個方面都更好? –
@Matteo Mosca:在ASP.NET MVC中使用'runat =「server」'是有意義的。否則,我們如何使用' '使用母版頁? –
看起來像你只讀了我評論的一半。我正在談論剃刀。您不要在Razor中使用標籤,它具有不同(並且完全更好)的語法。你仍然有不同的和更優雅的方式,像masterpages等概念。 –