Как манипулировать текстом в ViewBag.Title в asp.net mvc5 - PullRequest
0 голосов
/ 25 апреля 2018

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

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)" 
})

При изменении раскрывающегося списка my ViewBag.Title должно быть:

ViewBag.Title = "Engineering Services";

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

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

1 Ответ

0 голосов
/ 25 апреля 2018

Я выкопал мой старый ответ , который касается именно этой темы. То, что вы хотите, не возможно, вы не понимаете, что такое 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...