Как манипулировать текстом в ViewBag.Title в asp.net mvc5

У меня есть страница с названием следующим образом:

ViewBag.Title = "Find and hire freelancers online, find the right freelance workers with ease and hire a freelancer online";

У меня есть еще одно выпадающее меню на той же странице, как это:

@Html.DropDownList("serviceType", ViewBag.ServiceList as List<SelectListItem>, new 
{ 
  name  = "serviceType", 
  id = "serviceType", 
  @class = "form-control filterEmpty", 
  onchange = "serviceTypeChange(this,true)" 
})

На смену выпадающему списку ViewBag.Title должно быть:

ViewBag.Title = "Engineering Services";

Выше "Инженерные услуги" - мой выпадающий текст. Все это должно происходить без загрузки страницы. Я не знаю, как передать этот выпадающий текст в ViewBag.Title, Помогите мне, пожалуйста.

наконец, я хочу обновить заголовок страницы в раскрывающемся списке.

1 ответ

Я выкопал мой старый ответ, который касается именно этой темы. То, что вы хотите, не возможно, вы неправильно понимаете, что ViewBag это то, как это должно быть использовано.

Ниже приведена копия связанного ответа. Обратите внимание, что в первоначальном вопросе спрашивалось, как это сделать с помощью jQuery, но сам ответ в равной степени относится и к вашему случаю.


Вы не понимаете, как работает 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,


Для вас вопрос все тот же. ViewBag используется только при визуализации веб-страницы. К тому времени, когда ваш браузер загрузит страницу (и любые последующие действия пользователя на странице), ViewBag уже будет удален.

Даже если бы вы могли как-то его обновить, это ничего не изменило бы с обновленным значением. Это уже предоставило представление, в котором это было необходимо.

Если вы хотите, чтобы что-то происходило на странице, вы должны изменить это на самой странице (используя JS напрямую или библиотеку JS).

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