2011-01-26 5 views
3

MVC3アプリケーションでは、ユーザがIE < 9を使用しているときに出力用のHTML5タグをすべて削除して、フロントエンドの回避策を使用しないようにしたいとします。MVC3でのHTML出力の変更

コントローラではHttpModule,ActionFilterOnResultExecutedのメソッドを使用し、Application_Startでは使用しました。

私はこれまでのところ、私はのようなものを使用してHttpApplication.Context.Response.OutputStreamから文字列として出力を取得する必要があることを理解しました:

HttpApplication application = (HttpApplication)source; 
HttpResponse response = application.Context.Response; 
StreamReader sr = new StreamReader(stream); 
string content = sr.ReadToEnd(); 

をしかし、私が得るすべては同じエラーStream was not readableです。 context.Response.Writeで応答に書き込むことができます。

MVCは、「ページライフサイクル」が同じではないように見えますが、Webフォームがあります(ここでは私はちょうどRenderをオーバーライドしていて、うまく動作します)。

私の質問は、MVCで文字列としてHTMLを取得する方法です。誰かがhtml出力を操作しようとしましたか?

答えて

7

これを行うにはActionFilterを使用できるはずです。私はthis blog post.またはthis postの出力ストリームを変更する人の例を見てきました。

+0

ありがとう、2番目は私のために働いている! – fredrik

+0

最後のリンクは、HTML出力の変更について皆が知っておくべきことです!ありがとう! – bpiec

0

なぜあなたはjavascriptを使用しませんか?ユーザーのブラウザが何であるかを判断し、必要なhtmlを削除するだけです。 JQueryにはこれを行うための素晴らしい方法があります。

+0

あなたは絶対にクラウドですが、残念なことにこれはjavascriptとアプリケーションを必要とします。 – fredrik

0

MVCパターンのコンセプトに従うと、ブラウザがHTML5をサポートしているかどうかに応じて、別のView実装を使用することになります。代わりに、ブラウザーが最新の機能をすべてサポートしていない場合(またはライブラリーが独立してコントロールを実装できる場合)、適切に分解できる第三者ライブラリーを介してコントロールを使用することもできます。 ASP.NET MVCで提供されているJQueryは、ほとんどのHTML5タグをカバーする多くのコントロールが用意されています。

3

HTML5は下位互換性がありますので、どのブラウザでもこのデフォルト出力を自由に使用することができます。 IE6などの旧式のブラウザでも正しく表示され、邪魔にならない検証も機能します。ですから、私の助言は出力をそのまま残すことです。

+0

残念ながら、IEによって認識されないタグは閉じられ無視されます。 javascriptを使用すると、コンテナ要素として使用できるようにタグを作成できます。私はレイアウトを維持するためにすべてのhtml5タグをラップしたくありません。 – fredrik

+0

@fredrikもちろん、 ''のようなHTML5固有のタグを使用するとIE6では無視されますが、ASP.NET MVC 3ではHTML5固有のすべてが標準タグに適用される 'data- *'属性です「」のようなIE6は完全に快適です。 –

+0

はい。それらは無視されます。

Lorem

の場合、IEでは

Lorem

と表示されます。 – fredrik

関連する問題