2012-03-18 16 views
2

でエンコード特殊文字は、私はHTMLヘルパーで作成したAjaxのフォームを持っている:@using (Ajax.BeginForm(...))Ajaxフォーム(のASP MVC)

私はñのようないくつかの文字を投稿するときに問題があり、€など、それらをnとしてエンコードされます - >それらがコントローラによって受信されたときには、 URL内の特殊文字を渡すときに、以前のエンコーディングの問題を解決し

<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" fileEncoding="iso-8859-15" requestEncoding="iso-8859-15" responseEncoding="iso-8859-15" /> 

は、私はすでに私のWeb.configファイルで、このセクションを持っています。

コントローラーで文字を受信できるようにこの問題を解決するにはどうすればよいですか?事前

+0

ポストあなたのコントローラのコードください。コントローラーメソッドのパラメータータイプは何ですか?要求をフィドラーを通して観察すると、その要求はどのように見えますか? – BentOnCoding

+0

これはデフォルトのJavaScriptSerializerが原因である可能性があります。代わりにJson.NETでシリアル化した後に同じデータを送信するとどうなりますか?私はMVC4のRTMバージョンがJson.NETをすぐに使用すると聞いています:http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx – danludwig

答えて

3

おかげところは、要求を送信したときにAJAXがUTF-8エンコーディングを使用することです。しかし、矛盾の原因となるサーバーがrequestEncoding="iso-8859-15"になるようにサーバーを構成しました。

フォームにCategoryという名前の入力フィールドがあり、ユーザーがñ文字を入力したとします。あなたは、通常のHtml.BeginFormを使用する場合は、次のPOSTリクエストのペイロードがサーバーに送信されます。

Category=%F1 

一方あなたはAjax.BeginFormを使用する場合、次のリクエストのPOSTペイロードがサーバーに送信されます。

Category=%C3%B1&X-Requested-With=XMLHttpRequest 

この場合、サーバは、要求がiso-8859-15にエンコードされることを期待しているため、このUTF-8エンコードされた要求を適切にデコードできません。

したがって、あなたのweb.configを変更して、あなたのサイトにUTF-8要求と応答のエンコーディングを使用することができます。 2012年に、WebアプリケーションでUTF-8以外のエンコーディングを使用する正当な理由は考えられません。

<globalization 
    enableClientBasedCulture="true" 
    uiCulture="auto" 
    culture="auto" 
    fileEncoding="utf-8" 
    requestEncoding="utf-8" 
    responseEncoding="utf-8" 
/> 

も同様にUTF-8を使用するためには、あなたのレイアウトを持っている可能性のある<meta>タグを更新することを忘れないでください:

<meta charset="utf-8" /> 
+0

これはすばらしい説明です。ありがとうございます。承認されたものとしてマークする必要があります。 –

+0

ありがとう、それは私の問題を解決し、私はそれがそのように動作しなかった理由を理解した。今の問題は、検索ボックスに「ñ」のような文字を入力すると、次のような検索ページにリダイレクトされます:www.asdf.com/search?input=%F1、そのページでは、文字%F1正しくデコードできません。私はそれをURLに渡す前にそれをエンコードする必要がありますか?ありがとう! – Diego

+1

Ok問題が見つかりました。私はjavascript関数 'escape'を使っていたので、ユーザーは '&'を検索することができます。私はその機能を削除し、特殊文字はURLを介して正しく渡されるようになりました。今私は手動で対応するエンコードされた値のために '&'を置き換えなければならないと思います。 – Diego