Я выкопал мой старый ответ , который касается именно этой темы. То, что вы хотите, не возможно, вы не понимаете, что такое ViewBag
и как его следует использовать.
Ниже приведена копия связанного ответа. Обратите внимание, что в первоначальном вопросе спрашивалось, как это сделать с помощью jQuery, но сам ответ в равной степени относится и к вашему случаю.
Вы не понимаете, как работает 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
.
Для вас проблема все та же. ViewBag используется только при рендеринге веб-страницы. К тому времени, когда ваш браузер загрузит страницу (и любые последующие действия пользователя на странице), ViewBag уже будет удален.
Даже если бы вы могли как-то его обновить, это ничего не изменит с обновленным значением. Он уже предоставил представление, в котором он нуждался.
Если вы хотите, чтобы что-то происходило на странице, вы должны изменить это на самой странице (используя JS напрямую или библиотеку JS).