Возврат ASP.NET Core MVC ViewBag из контроллера в представление с помощью jQuery

#jquery #asp.net-mvc #viewbag

#jquery #asp.net-mvc #viewbag

Вопрос:

Я пытаюсь вернуть значение ViewBag в раскрывающийся список html (в форме), на мой взгляд, в <script> области, использующей jQuery. Я запускаю сторону контроллера на основе значения другого выпадающего списка (в форме) следующим образом:

Просмотр (запускает метод действия GetBrandsForDropdown):

 $.ajax({
 

` url: ‘/Home/GetBrandsForDropdown’,
});

Контроллер:

 public IActionResult GetBrandsForDropdown()
{
   var brandListing = context.Brands.OrderBy(b => b.BrandName).ToList();
   ViewBag.brandList = brandListing;
   return View();
}
 

Я отладил это, и ViewBag имеет значения.

Вид:

 var myBrands = '@(ViewBag.brandList)';
alert("The value is: "   myBrands);
 

Я попробовал несколько итераций, чтобы получить значение в ViewBag. Приведенный выше — единственный, который позволил продолжить обработку (т. Е. Предупреждение (Которое включало мой текст), отображаемое на моем экране). Однако значение ViewBag является пустым. Помощь в том, как получить значение (значения) для представления и добавить их в мой <form> выпадающий список, была бы очень признательна.

Комментарии:

1. Я исправил некоторое ваше форматирование, но в вашем вызове ajax есть дополнительная галочка, и я не был уверен, было ли это в вашем оригинале или нет, поэтому я оставил его в покое. Если это находится в исходном коде, это приведет к синтаксической ошибке.

2. Извините, но почему вы хотите это сделать, а не возвращать данные в формате JSON и в вашем ajax's success , выполнять действия, которые вы хотите?

3. Большое спасибо за ваш ответ. Я новичок в работе с Core MVC, JScript и т.д. Я попробовал оба ваших предложения, но не смог заставить ни одно из них работать. Ему вообще не понравился <select> и он остановил обработку. При комментировании приложение не работало со словом Encode. Когда я изменил его на принятый параметр, он запускался без ошибок, но не помещал значения в мой выпадающий список. Опять же, любая помощь будет высоко оценена.

Ответ №1:

Вы можете использовать Html helper, чтобы получить значение вашего viewbag, следующим образом:

 var myBrands = @Html.Raw(Json.Encode(@ViewBag.brandList));

// then you can loop through your JSON...

$.each(myBrands , function (brand)
{
    console.log(brand);
}
 

Редактировать:

и чтобы сделать его yourdropdown (выберите опцию), вы можете использовать этот код в своем цикле :

 <select name="yourdropdown " id="yourdropdown "></select>
<script>
var myBrands = @Html.Raw(Json.Encode(@ViewBag.brandList));
$.each(myBrands , function(key, value) {
  var i = Object.keys(value)[0];
  $("select#yourdropdown ").append( $("<option />").val(i).text(value[i]) );
});
</script>
 

Замечание:
Почему просто не использовать:

@Html.DropDownList("MyBrand", new SelectList(ViewBag.brandList , "id", "BrandName"))