2014-09-05 2 views
0

У меня есть категории и подкатегории в качестве модели. И каждая категория включает множество подкатегорий, как вы, возможно, догадались. Дело в том, что у меня есть мнение, и на мой взгляд, у меня есть фрагмент кода, как этот:Как синхронизировать два элемента 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:

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

+0

Вы видите сообщение об ошибке до отправки формы? –

+0

@TiesonT. Нет, нет ошибки в представлении или на консоли перед отправкой формы. Когда я отправляю сообщение, я получаю сообщение об ошибке, и я вижу, что случилось, см. Мое редактирование. Мне нужно получить идентификационную часть подкатегории. – tett

+0

Хорошо, решил. Мне нужно было изменить подкатегорию part.value на subcategory.id. – tett

ответ

0

Это

$("#SubcategoryID").append('<option value="' + subcategory.value + '">' + subcategory.value + '</option>'); 

должен быть

$("#SubcategoryID").append('<option value="' + subcategory.id + '">' + subcategory.value + '</option>'); 
Смежные вопросы