2011-02-01 2 views
1

私はこのようなHtml.TextBoxFor方法でカスタム属性としてjavascriptのメソッドを追加しようとしています:Html.TextBoxForメソッドでJavaScriptの単一引用符をどのように追加しますか?

<%: Html.TextBoxFor(model => model.DateCreated, new { size="15", onfocus="myObject.myFunction(this, 'DateCreated');return false;"}) %> 

私が経験してる問題は、単一引用符があるエンコードされたHTML、されていることです私は<%:のexpectionを持っています。 \その文字列の文字をエスケープするために\を使用するのと同じように、その部分のhtmlエンコードを防ぐ方法がありますか?このカスタム属性を追加する別の方法はありますか?あるいは、私はこれを間違ってやっているだけですか?

答えて

2

引用符がエンコードされている場合でも、JavaScriptは機能するはずです。 jqueryのを使用して、別のJavaScriptファイルで、その後

<%: Html.TextBoxFor(model => model.DateCreated, new { size="15", id="date" }) %> 

と:これを達成する

<%: Html.TextBox("DateCreated", "", new { onclick="alert('DateCreated');return false;"}) %> 

もう一つの方法は、スクリプトを使ってマークアップを混在さ控えめなJavaScriptとないを使用することです。たとえば、次のスニペットは、正しいテキストを警告します:

$(function() { 
    $('#date').focus(function() { 
     myObject.myFunction(this, 'DateCreated'); 
     return false; 
    }); 
}); 
+0

私は実際の問題を読んでいるだけでなく、問題として見たいものではないことを確認するためにアラートを試みます。私はそれを使用する場合は、私はこのようなアイテムをたくさん持っていると、それぞれのために1つを投げることは重くなるだろうという理由で、より一般的なようなjqueryメソッドを作る必要があります。 –

+0

文字列をjavascript変数として宣言するだけで、問題なく変数名を渡すことができました。たぶん将来、私はそのjqueryメソッドを名前をハードコードすることなくコントロールで使用できるようにすることができますが、今のところ一重引用符を追加しても問題は発生していないようです。私は他の場所を見る必要があります。 –

1

.NET 4のデフォルトのエンコーダは、それがあると考えるの文字が<、&、「、「、および>を含め、潜在的に危険であることをコードしている。しかし、このエンコーディングは、あなたがしようとしているスニペットのJavascriptの実行に影響を与えるべきではありませんブラウザは自動的に&#39を「文字」に変換してからJavascriptパーサに渡しますので、アプリケーションに悪影響を及ぼしている場合は、公式のバグを提出することを検討してください。

ASP.NETで使用されるデフォルトのエンコーダを独自の作成者に変更することができます。Philは、http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspxでAnti-XSSの接続に必要な手順を説明しています。エンコーダ。しかし、もしあなたが望むなら、あなたは以外のすべてのものをエンコードしたカスタムHttpEncoderを作ることができます。の場合、同じ基本ステップに従ってください。

+0

私はダーリンディミトロフのアラートの提案を試みて、それが実際に自分の問題を引き起こしている原因であることを確認しようとしています。 –

関連する問題