Установка значения в ViewBag с помощью Jquery
Я просто хочу спросить, есть ли способ установить значение viewbag динамически с помощью jquery? Я пытаюсь этот код в моем скрипте,
$(".btn").on("click",function(){
@ViewBag.Id = $(this).attr("id")
});
я не знаю, если это правильно, но когда я пытаюсь запустить свой проект MVC 3, эта ошибка появляется в моей firebug
Syntax Error
= $(this).attr("id")
Пожалуйста помоги. Спасибо
1 ответ
Вы не понимаете, как работает ViewBag.
При работе в MVC, когда вы открываете веб-страницу, вот что (примерно) происходит:
- Метод 'Index' в FooController запущен. В конце вид возвращается.
- Затем ваше MVC-приложение найдет для вас представление и начнет отображать его в соответствии с HTML-кодом, найденным в связанном файле.aspx. Если программа встречает такие элементы, как "@ViewBag.Id", она в основном выполняет замену строки на любое значение ".Id". (Это немного сложнее, но, ради аргумента, он в основном заменяет строку).
- После рендеринга HTML-документ отправляется вашему браузеру, который затем отображает его.
К тому времени, когда ваш браузер получает страницу, ваш ViewBag в основном выходит из области видимости. Это связано с тем, что ваше приложение ASP (MVC) использует ViewBag, но Javascript имеет только область видимости в документе веб-браузера (это HTML-код, который приложение вернуло в браузер после того, как ViewBag вышел из области видимости. Javascript не является частью приложения MVC, а только веб-страницей.
Итак, короткий ответ: нет, ты не можешь так делать. Попробуйте думать об этом, как о замене строковой строки. Вы можете поместить значение ViewBag только на HTML-страницу, а не наоборот.
Предположим, ваш идентификатор 5, следующий код в файле aspx:
$(".btn").on("click",function(){
@ViewBag.Id = $(this).attr("id")
});
Будет отправлен в браузер как
$(".btn").on("click",function(){
5 = $(this).attr("id")
});
Поскольку ваш браузер видит только эту последнюю часть, в Javascript это не имеет смысла. В вашем случае, с синтаксической ошибкой, это просто означает, что ваша переменная не была инициализирована, и вы пытаетесь получить доступ к null
,