18

どうやら、ASP.NET Web フォーム ページおよびビューで<%= %>コンストラクト ( render block ) を使用して、書式設定された出力を書き込むことが可能です。

<%= "{0} is {1}", "Foo", 42 %>

これにより、「Foo is 42」がレンダリングされます。私の知る限り、ASP.NET パーサーは<%= %>への呼び出しに変換されHttpResponse.Write(string)ます。上記のコードでは明らかに、1 対 1 の変換はありません。これは、引数の数が一致しないためです (,上記の式の が引数を分離していると仮定します)。

これで、クラスTextWriterWrite(string, object[])メソッドがあることがわかりました。

パーサーからの出力を確認しましたが、実際には、フォーマットTextWriterの引数を受け入れる 's メソッドを呼び出します。params object[]

private void @__Renderform1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer) {
    // ...
    @__w.Write( "{0} is {1}", "Foo", 42 );

その動作はどこかに文書化されていますか?

4

3 に答える 3

3

これは<%= %> 埋め込みコード ブロックであり、Classic ASP との互換性を維持するために存在します。

ご覧のとおり、次<%= "{0} is {1}", "Foo", 42 %>と同等です。

string s = string.Format("{0} is {1}", "Foo", 42);
Response.Write(s);

その動作はここに文書化されています:

オブジェクト配列のテキスト表現を含む書式設定された文字列を、保留中のタブ スペースと共に出力ストリームに書き込みます。このメソッドは、String.Format メソッドと同じセマンティクスを使用します。(TextWriter.Write(String, Object[]) をオーバーライドします。)

Code Render Block が Write メソッドを呼び出すことが文書化されている場所です。

最後に、埋め込みコード ブロックの構文は、こちらで説明されているように .NET 4 用に更新されました。

于 2013-09-06T12:49:45.623 に答える