Установка значения в ViewBag с помощью Jquery

Я просто хочу спросить, есть ли способ установить значение viewbag динамически с помощью jquery? Я пытаюсь этот код в моем скрипте,

$(".btn").on("click",function(){
@ViewBag.Id = $(this).attr("id")
});

я не знаю, если это правильно, но когда я пытаюсь запустить свой проект MVC 3, эта ошибка появляется в моей firebug

Syntax Error
    = $(this).attr("id")

Пожалуйста помоги. Спасибо

1 ответ

Решение

Вы не понимаете, как работает ViewBag.

При работе в MVC, когда вы открываете веб-страницу, вот что (примерно) происходит:

  1. Метод 'Index' в FooController запущен. В конце вид возвращается.
  2. Затем ваше MVC-приложение найдет для вас представление и начнет отображать его в соответствии с HTML-кодом, найденным в связанном файле.aspx. Если программа встречает такие элементы, как "@ViewBag.Id", она в основном выполняет замену строки на любое значение ".Id". (Это немного сложнее, но, ради аргумента, он в основном заменяет строку).
  3. После рендеринга 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,

Другие вопросы по тегам