У меня есть категории и подкатегории в качестве модели. И каждая категория включает множество подкатегорий, как вы, возможно, догадались. Дело в том, что у меня есть мнение, и на мой взгляд, у меня есть фрагмент кода, как этот:Как синхронизировать два элемента DropDownList в MVC5?
<div class="form-group">
@Html.LabelFor(model => model.CategoryID, "Category", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("CategoryID", null, "Please select a category", htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CategoryID, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SubcategoryID, "Subcategory", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("SubcategoryID", null, "Please select a subcategory", htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.SubcategoryID, "", new { @class = "text-danger" })
</div>
</div>
Затем в мой контроллер, у меня есть два объекта ViewBag, которые населяют мои объекты SelectList:
ViewBag.CategoryID = new SelectList(db.Categories, "CategoryID", "CategoryName");
ViewBag.SubcategoryID = new SelectList(db.Subcategories, "SubcategoryID", "SubcategoryName");
Затем я написал некоторый код AJAX, чтобы заставить значения элементов DropDownList синхронизировать. У меня есть следующее действие и JS-код.
[AllowAnonymous]
public JsonResult GetSubcategories(int id)
{
var results = db.Subcategories.Where(s => s.CategoryID == id).Select(x => new { id = x.SubcategoryID, value = x.SubcategoryName }).ToList();
return Json(results, JsonRequestBehavior.AllowGet);
}
код JavaScript с вызовом AJAX:
$("#CategoryID").change(function() {
$("#SubcategoryID").empty();
$.ajax({
type: 'POST',
url: '/Account/GetSubcategories',
dataType: 'json',
data: { id: $("#CategoryID").val() },
success: function (subcategories) {
$.each(subcategories, function (i, subcategory) {
$("#SubcategoryID").append('<option value="' + subcategory.value + '">' + subcategory.value + '</option>');
});
},
error: function (ex) {
console.log('Failed to retrieve subcategories! ' + ex);
}
});
return false;
});
Дело в том, что она синхронизирована с DropDownLists, поэтому всякий раз, когда я выбираю категорию, я только показывает подкатегорий для этой выбранной категории. Но я не могу представить свою форму сейчас, всякий раз, когда я нажимаю кнопку «Отправить», появляется сообщение об ошибке, указывающее, что выбранное значение не является допустимой подкатегорией. Как я могу это исправить?
EDIT:
Когда я сделал некоторые рытье с инструментами разработчика, я увидел, что для моих категорий, для значения части у меня есть номера, которые являются их соответствующим идентификатором в базе данных, но теперь для моих подкатегорий для часть значения Я получаю текст, что означает название подкатегории.
Вы видите сообщение об ошибке до отправки формы? –
@TiesonT. Нет, нет ошибки в представлении или на консоли перед отправкой формы. Когда я отправляю сообщение, я получаю сообщение об ошибке, и я вижу, что случилось, см. Мое редактирование. Мне нужно получить идентификационную часть подкатегории. – tett
Хорошо, решил. Мне нужно было изменить подкатегорию part.value на subcategory.id. – tett