Может кто-то, пожалуйста, помогите мне понять, как работает Html.DropDownListFor? У меня есть модель, которая выглядит следующим образомHtml.DropDownListFor confusion
public class TestModel
{
public IList<SelectListItem> ProductNames { get; set; }
public string Product { get; set; }
}
призыв к DropDownListFor который выглядит как
@Html.DropDownListFor(model => model.ProductNames, Model.ProductNames, "Select a Product", new {@class="selectproductname" })
С этой настройки я считаю, что выпадающий список получает заполняется правильно, однако после подачи формы I похоже, не может получить выбранный элемент. Кроме того, из того, что я прочитал призыв к Html.DropDownListFor должно выглядеть на самом деле
@Html.DropDownListFor(model => model.Product, Model.ProductNames, "Select a Product", new {@class="selectproductname" })
На самом деле другие части коды выглядеть так хорошо, но когда я делаю это выпадающий список не заселяются. Я что-то упустил?
Пара боковых нот: 1) Население этого ниспадающего происходит после выбора значения из другого выпадающего списка, так что я сделать вызов AJAX, вызвав getJSON, чтобы получить данные из базы данных 2) Приложение является приложение MVC
Поблагодарили бы за помощь. Дайте мне знать, если вам нужна любая другая информация, которая поможет ответить на этот вопрос
Edit: Вот еще некоторые детали
Это метод действия в контроллере используется для получения данных для выпадающего
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult LoadProductsBySupplier(string parentId)
{
var ctgy = this._categoryService.GetAllCategoriesByParentCategoryId(Convert.ToInt32(parentId));
List<int> ctgyIds = new List<int>();
foreach (Category c in ctgy)
{
ctgyIds.Add(c.Id);
}
var prods = this._productService.SearchProducts(categoryIds: ctgyIds, storeId: _storeContext.CurrentStore.Id, orderBy: ProductSortingEnum.NameAsc);
products = prods.Select(m => new SelectListItem()
{
Value = m.Id.ToString(),
Text = m.Name.Substring(m.Name.IndexOf(' ') + 1)
});
var p = products.ToList();
p.Insert(0, new SelectListItem() { Value = "0", Text = "Select A Product" });
products = p.AsEnumerable();
//model.ProductNames = products.ToList();
return Json(products, JsonRequestBehavior.AllowGet);
}
И это призыв JQuery к действию в контроллере
$("#Supplier").change(function() {
var pID = $(this).val();
$.getJSON("CoaLookup/LoadProductsBySupplier", { parentId: pID },
function (data) {
var select = $("#ProductNames");
select.empty();
if (pID != "0") {
$.each(data, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
}
});
});
Именно это $ .each цикл, который Безразлично» т получить заключенным, если я использую модель => model.Product даже если данные возвращаются в переменных данных
Второе использование является правильным. Значение 'Property' будет значением выбранного параметра, но вы не указали, как вы заполняете параметры в вашем аякс-вызове, поэтому его трудно узнать, где вы проблема. –
Покажите нам, как вы заполнили 'IList ProductNames' Все зависит от' '' '' '' SelectListItem'. Как сказал @StephenMuecke, 2-е использование правильное, если вы присваиваете 'Product' значение' Value' части 'ProductNames' ListItem –
, когда вы используете' model => model.Product' в обратном вызове ajax-использования, как это: var select = $ («#Product») 'или' var select = $ (". Selectproductname") 'selector может быть' # id' или '.classname' –