2009-08-27 8 views
3

私は、サードパーティのコンポーネントがResponse.Writeを妨害し、Response.Write("")内のコンテンツを他のhtmlの前にレンダリングさせる問題が発生しました。たとえば:Response.Writeと<%= %>の実際の違いは何ですか?

<html><head><title><% Response.Write("HELLO WORLD") %> 

HELLO WORLD<html><head>... 

としてレンダリングされますが、<%= %>ブロックを使用してレンダリングされるコンテンツが正しくに動作します。以下のコードは完璧に動作します:

<html><head><title><%="HELLO WORLD"%> 

を私はいつも<%=は、単にResponse.Writeの短縮形であると仮定。私がMSDNで見つけたことから、<%=であり、最終的にはがResponse.Writeに変換されていることがわかりましたが、明らかにいくつかのステップがあります。

なぜ2つのレンダリングが異なっているのか、または<%= %>ブロックがどのように処理されるかを説明するドキュメント/情報を私に指摘する人はいますか?

更新:問題の原因となったコントロールは、2009 Q1リリースのTelerik AjaxManagerコントロールでした。 Q2コントロールにアップグレードすると、問題が解決されました。

残念ながら私はソースにアクセスできないので、なぜコントロールがこの動作を引き起こしているのか理解できませんでした。問題は解決されましたが、私はまだそれが最初に存在した理由について非常に興味があります。

+0

どのサードパーティ製コンポーネントを使用していますか? – madcolor

+0

この問題は本当に意味をなさない...決して私に起こった... – voyager

+0

@voyager、私は完全に同意する;これは意味がありません。私は自分の正直さに疑問を抱きますが、別の開発者は自分のローカルマシン上でその動作を再現することができました(同じプロジェクト)。 @madcolor多くのTelerikコントロール(ajax、モーダルポップアップ、グリッド)。 –

答えて

6

<%= "foo"%>はResponse.Write( "foo")になります。一度それがコンパイルされます。これを確認するには、ASP.NET Temporary Filesフォルダを掘り、Reflectorを使用してdllファイルを逆コンパイルします。