Смена кодировки при $get

242
21 января 2018, 03:28

День добрый!

Передаю через $get запрос на контроллер, в нем есть QueryStringParameter с кириллицей.

Action принимает мои параметры, но кириллицу не может правильно декодировать. Причем, это проблема только в IE11, в Mozilla все работает.

Чего только не пробовал, кодировал эти символы на стороне контроллера в 1251, UTF-8 и прочие.. Так и не получил нормальный русский текст. Пробовал еще через Url.Decode.

 public ActionResult AddNewCom(string idEvent, string Com, string RouteC, string Aut, string Actions)

Url:

/PCMS/AddNewCom?idEvent=b282c0fb-0092-4ef2-8f43-2e397d7551e0&Com=23&RouteC=%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd+%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd+%ef%bf%bd+%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd%ef%bf%bd&Aut=112&Actions=134"

Проблема с параметром RouteC. На стороне JavaScriptа ссылка на метод формируется корректно, с русскими символами. Но на стороне сервера не раскодируется назад.

JS:

 var tex = "@Html.Raw(Url.Action("AddNewCom", "PCMS", new { idEvent = "guid", Com="comm", RouteC="routecrit", Aut="authorname", Actions="acts" }))";
                var obj = $('#ddlCriteria').data("ejDropDownList");                
                tex = tex.replace("comm", $("#RTEComment").val());
                tex = tex.replace("routecrit", obj.option("text"));
                tex = tex.replace("authorname", $("#RTEAuthor").val());
                tex = tex.replace("acts", $("#RTEActions").val());
                tex = tex.replace("guid", selectedEventID);

                $.get(tex, function (rawData) {
                });
Answer 1

Перед вставкой в URL строковых значений надо их url-кодировать. Браузер, конечно, может и сам попытаться это сделать... но не факт что у него получится то, что вы от него ожидаете.

Делается это функцией encodeURIComponent:

tex = tex.replace("routecrit", encodeURIComponent(obj.option("text")));

Но, вообще говоря, JQuery предоставляет и более простые способы формирования запросов. Например, можно сделать так:

$.get("/PCMS/AddNewCom", {
    idEvent: selectedEventID,
    Com: $("#RTEComment").val(),
    RouteC: obj.option("text"),
    Aut: $("#RTEAuthor").val(),
    Actions: $("#RTEActions").val(),
}, function (rawData) {
READ ALSO
Смена url и передача его другим js

Смена url и передача его другим js

Eсть меню, которое при нажатии меняет контент

331
Где найти слайдер такого формата?

Где найти слайдер такого формата?

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

296
Создать динамические URL в HTML на основе JavaScript

Создать динамические URL в HTML на основе JavaScript

Провожу эксперимент с использованием AMT Amazon Mechanical Turk, требуется перенаправлять пользователей с AMT по ссылке на сервер, где они, собственно,...

306
Не работает font-face [требует правки]

Не работает font-face [требует правки]

Вопрос уже много раз тут звучал, но ответы никакие не помогают , обычно я использую отдельный css файл, в котором прописываю font-face, путь к шрифту

251