Кодировать специальные символы в виде ajax (asp mvc) - PullRequest
2 голосов
/ 18 марта 2012

У меня есть форма ajax, созданная с помощью помощника html: @using (Ajax.BeginForm(...))

Проблема заключается в том, что, когда я отправляю некоторые символы, такие как ñ, € и т. Д., Они кодируются как ->>, € -> ¬, когда они принимаются контроллером.

У меня уже есть этот раздел в моем Web.config:

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

, которая решала предыдущие проблемы кодирования при передаче специальных символов в URL.

Как я могу исправить эту проблему, чтобы я мог получать эти символы в моем контроллере?

Заранее спасибо

1 Ответ

3 голосов
/ 19 марта 2012

Дело в том, что AJAX использует кодировку UTF-8 при отправке запроса.Но вы настроили свой сервер на ожидание requestEncoding="iso-8859-15", из-за чего возникает расхождение.

Предположим, что в вашей форме есть поле ввода с именем Category, и пользователь вводит в него символ ñ.Если вы используете обычный Html.BeginForm, то следующая полезная нагрузка POST-запроса будет отправлена ​​на сервер:

Category=%F1

С другой стороны, если вы используете Ajax.BeginForm, следующая полезная нагрузка POST следующего запроса будет отправлена ​​насервер:

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

В этом случае сервер не может правильно декодировать этот запрос в кодировке UTF-8, так как ожидает, что запросы будут iso-8859-15 кодированы.

Таким образом, вы можете изменитьваш web.config для использования кодировки запросов и ответов UTF-8 для вашего сайта.Не могу придумать вескую причину в 2012 году использовать в веб-приложении любую другую кодировку, кроме UTF-8.

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

Также не забудьте обновить любые теги <meta>, которые могут у вас быть вваши макеты, чтобы также использовать UTF-8:

<meta charset="utf-8" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...