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