Переменная Javascript в бритве ActionLink

var boxIdValue = 233;
var result = title + '<br/>@Html.ActionLink("Detail", "Show", "Boxes", new{boxId=233}, null)';

Когда я жестко кодирую boxId, это работает. Но когда я пишу:

var result = title + '<br/>@Html.ActionLink("Detail", "Show", "Boxes", new{boxId=boxIdValue}, null)';

Это не так. Можно ли таким образом смешивать javascript var и razor?


person 1110    schedule 17.03.2012    source источник


Ответы (1)


Взгляните на этот вопрос, связанный с переполнением стека. .

Причина, по которой это проблема, заключается в том, что метод Razor выполняется на веб-сервере во время рендеринга, а javascript выполняется в клиентском браузере во время выполнения.

Я бы решил это, сделав что-то вроде

var boxIdValue = 233;
var link = '@Html.ActionLink("Detail", "Show", "Boxes", new{boxId=-1}, null)'
link = link.replace('-1', boxIdValue);
var result = title + '<br />' + link;
person AlexC    schedule 17.03.2012
comment
Это работает, только если у вас нет второго параметра. Что-то вроде new{boxId=-1,page=1} завершится ошибкой. Разделитель & будет закодирован в формате html, а параметр страницы будет недоступен для катиона. Чтобы это работало, вам нужно использовать @Html.Raw(Html.ActionLink... - person Mathias F; 20.12.2017