Символ '&' экранирован в URL при использовании с 'window.location' - PullRequest
0 голосов
/ 22 апреля 2020

На странице просмотра внутри моего приложения mvc есть что-то вроде

@{ 
    var controllerUrl = Url.Content("~/" + ViewBag.NextLink);
    var fullPath = controllerUrl + "?stdId=4044&stdPtId=3052&=5366";
}

<script type="text/javascript">
    var fullPath =  '@fullPath';
</script>

<div class="marginspace">
        <input type="submit" class="btn btn-primary pull-right" value="Next" onclick="window.location=fullPath;" />
</div>

Проблема в том, что когда я нажимаю кнопку "Далее", URL показывает

http://something?stdId=4044&amp;stdPtId=3052&amp;fid=5366

Посмотрите, как символ '&' был экранирован в URL

Мой ожидаемый URL должен быть

http://something?stdId=4044&stdPtId=3052&fid=5366

Итак, как я могу убедиться, что URL будет построен правильно, без экранирования? символ '&'?

Кстати, я пробовал с этим

onclick="window.location=decodeURI(fullPath);"

и с этим

onclick="window.location=unescape(fullPath);"

и до сих пор ничего не изменилось.

1 Ответ

1 голос
/ 22 апреля 2020

Проблема с этой строкой:

 var fullPath = '@fullPath';

Razor @ по умолчанию HTML закодирует ваш вывод. Так как & недействителен HTML, он преобразует его в &amp;. Это здорово, так как это означает, что вам не нужно проверять правильность всех ваших входных данных и просто @User.CompanyName (с именем, например, "B & Q") выведет B&amp;Q для отображения как B&Q.

В тех случаях, когда вы хотите, чтобы выходные данные были точно такими же, как есть, без их кодирования, вы используете:

var fullPath = '@Html.Raw(fullPath)';

, и она будет выводить переменную в том виде, в каком она есть, без предварительного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...