2011-07-07 11 views
0

おそらくバグでしょう。再現手順:ASP.NET MVC html writerのバグ?

(1)(ASPXビューエンジン)ASP.NET MVC 3プロジェクトを作成します

(2)モデルのフォルダに移動し、新しい単純なモデル

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="&lt;%: MyModel.MyString %>" rel="&lt;%: MyModel.MyString %>" /> 
    <script src="foo" /> 
</head> 

何か:

私はあなたが(不要なスペースが削除されている)を取得すると思います。 linkタグのすべての属性が正しく評価されていません。エンコードされているように見えますか? titlescriptの同じ表現は正しいですが。

b。これに3行目を変更します。

<link href="<%: MyModel.MyString %>" rel="<%: string.Format("{0}", "foo") %>" /> 

OR

<link href="<%: MyModel.MyString %>" rel="<%: "foo" %>" /> 

あなたが正しいすべてを取得します(でもhrefが正しいです!)。

c。 headなし、runat="server"は常に正しいです。

ビューをhtmlテキストにレンダリングするとバグだと思います。ソースコードをチェックしてバグを見つけようとするのは本当に悪夢です。誰か私に理由を教えてもらえますか?

答えて

1

単純な理由は、ASP.NETサーバーコントロールが< %%>タグを変換しないことです。あなたのHeadにはrunat = "server"が含まれているので、ASP.NET Web Form Engineは、Webサーバーコントロールにするかどうかにかかわらず、すべての子コントロールに対して何らかの内的な決定を行います。

今慎重ショー完全コンパイルソースチェックこの

<head id="Head1" runat="server"> 
<title><%: MyModel.MyString %><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
<link id="link1" href="<%: MyModel.MyString %>" rel="<%: MyModel.MyString %>" /> 
<link id="link2" href="<%: MyModel.MyString %>" rel="<%: string.Format("{0}", "foo") %>" /><%sa %> 
<script src="<%: MyModel.MyString %>" /> 
</head> 

<script src="<%: MyModel.MyString %>" /> 

を置く:それ以上に

+1

を、私はそれが非関連の問題だと思う - それは今までにすることができた場合まったく問題とみなされました。なぜMpc用に設計されたネイティブのRazorがあり、すべての面で優れた方法で、aspx構文とWebformsの遺産である "runat = server" –

+0

@Matteo Mosca:ASP.NET MVCで 'runat =" server "'を使うのは意味があります。そうでなければ、 ''でマスターページをどのように使うことができますか? –

+0

あなたは私のコメントの半分しか読まないようです。私は剃刀について話していた。あなたはRazorにタグを使用していませんが、それは異なった(そして完全に良い)構文を持っています。 masterpagesなどのコンセプトはまだまだ違った、よりエレガントな方法です。 –

関連する問題