2011-06-24 14 views
5

私は、ASP.NET MVCのTextAreaFor HTMLヘルパーで最も厄介な(可能な)バグに気付きました。何らかの理由で、HTMLヘルパーは、テキストエリアのコンテンツの前にNewLineを追加します。明らかに、これは目的に応じた新しい行から始まる個人のコンテンツの可能性のある問題に対処するためであり、ブラウザは仕様に従ってそれを無視します。ASP.NET MVCのTextarea AntiXssLibraryを使用しているときに行を追加するHTMLヘルパー

しかし、それを追加することによって、私は今、私のテキストエリアの全てに自動的にフォームのロード上の任意のコンテンツの前に余分なラインを持っているより多くの迷惑なバグを取得する(つまり、これは私のフィールドのすべてのコンテンツの前に現れます: ) 。それはそれを吐き出す前に何かが "改行"をエンコードしているように見えるでしょう。

誰かがこれに対応していますか?私はそれは、それは

<textarea> 
    Stuff</textarea> 

をプリントアウトしていない私は、さらに調べると...

編集 を取得しています

<textarea>&#13;&#10;Stuff</textarea> 

するために意図された動作であることを期待しますこれは、デフォルトのHtmlEncoderの代わりに、AntiXssLibraryをエンコードに使用しているためです。私は、バージョン4.0を使用していますし、私のエンコーダクラスメソッドは次のようになります。

protected override void HtmlEncode(string value, TextWriter output) 
    { 
     output.Write(Microsoft.Security.Application.Encoder.HtmlEncode(value)); 
    } 

だから私の考えはTextAreaHelperから呼び出されTagBuilderクラス、以来、HTMLタグの内容をコードすることがあり、それは想定していますデフォルトのHTMLエンコーダの動作ですが、AntiXssLibraryがより徹底しているため、この動作が見えますか?

+0

私たちの作業MVC3サイトの一つでこれをテストし、あなたが記述行動が表示されません。おそらくもっと情報を投稿するかもしれません。 – JasonG

+0

これは私が新しいプロジェクトを開始するたびに私を襲う。ところで、私はこれまでIEやChromeではなく、FireFoxでこの動作を見ています。 – mxmissile

答えて

8

いくつかのコードを掘り下げた後、自分の考えが正しいことがわかりました。 MVC3のTextArea HTMLヘルパーはTagBuilderクラスを使用し、以下のん:SetInnerTextがそれに渡される引数の内容にHttpUtility.Encodeを呼び出したよう

tagBuilder.SetInnerText(Environment.NewLine + value); 

、これは上だけではなく、呼び出されるデフォルトのエンコーダになり実際のVALUEと同じですが、このEnvironment.NewLineにも同様です。つまり、デフォルトのHtmlEncoder(代わりにAntiXssLibraryなど)を使用していない場合、このような予期しない動作が発生する可能性があります。彼らが代わりに呼び出すようにするために

修正は次のようになります。

tagBuilder.InnerHtml = Environment.NewLine + HttpUtility.Encode(value); 

私はバグレポートを提出しています。

平均時間では、私はJavascriptのonLoadを実装しています全てのテキストエリアから問題のエンコーディングを削除する修正:

$("textarea").each(function() { $(this).val($(this).val().trim()); }); 
+1

ありがとうございました(+1)しかし、jsを$( "textarea")に変更しなければなりませんでした。それぞれ(function(){$(this)).val($。trim($ this).val()) );});それがie8で動作するようにする(http://stackoverflow.com/questions/3439316/ie8-and-jquerys-trimを参照) – Adam

+1

あなたが提出したバグのURLがありますか?私はこの同じ問題が私たちに影響を与えているので、それを追跡したいと思います。 – Jacob

+1

http://aspnet.codeplex。com/workitem/8848 –

関連する問題