Настройка значения в ViewBag с помощью JQuery

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

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

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

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

Пожалуйста помоги. благодаря

Ответ 1

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

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

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

К моменту, когда ваш браузер получает страницу, ваш ViewBag в основном ушел "из области видимости". Это потому, что (MVC) приложение ASP использует 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.