2014-12-29 4 views
0

Я хочу установить значения dropdownList в соответствии с selectedValue другого dropdownList.Получить selectedValue dropdownList в контроллере во время выполнения

Так, например:

ViewBag.Brand = new SelectList(db.Brand, "Libel", "Libel"); 
ViewBag.IdModel = new SelectList(db.Model.Where(model => model.Brand == ViewBag.Brand.SelectedValue), "IdModel", "Descriptive"); 

Я знаю, что это не работает, но это, чтобы показать логику, я хотел бы иметь.

И это мое мнение:

<div class="form-group"> 
    @Html.LabelFor(model => model.IdModel, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownList("IdModel", null, htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.IdModel, "", new { @class = "text-danger" }) 
    </div> 
</div> 

<div class="form-group"> 
    @Html.LabelFor(model => model.Brand, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownList("Brand", null, htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.IdModel, "", new { @class = "text-danger" }) 
    </div> 
</div> 

Является ли их какой-либо простой способ сделать это?

Thank's!

ответ

0

есть 2 способа:

1 сделайте это на клиенте; 2 сделать это на сервере

  1. На клиента. Вторые варианты выпадающего списка должны содержать идентификаторы с идентификатором бренда, тогда вы можете написать javascript, который должен сменить выбранный индекс второго раскрывающегося списка на основе выбранного значения первого раскрывающегося списка. Здесь необходимо основываться на вашей структуре модели.

  2. На сервере. Сделайте обратную передачу при каждом изменении первого падения. И возвращайтесь каждый раз, когда новая модель для второго выпадающего значения основывается на опубликованной стоимости с первого выпадающего списка.

1

В вашем случае ваша потребность в вызове ajax или вызове сервера при изменении выпадающего списка бренда. См. Пример ниже. Это просто используемые статические данные для определения того, когда изменилась модель бренда, а затем автоматически изменила выпадающее окно модели с помощью jquery (клиентская сторона).

Вид сбоку: -

@*Display the elements in the page*@ 
@*------------------------------------------------*@ 
<script type="text/javascript" 
     src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 
<div class="form-group"> 
    <div class="col-md-10"> 
    @Html.DropDownList("Brand", (SelectList)ViewBag.Brand, new { htmlAttributes = new { @class = 
     "form-control" } }) 
    </div> 
</div> 
<div class="form-group"> 
    <div class="col-md-10"> 
     @Html.DropDownList("IdModel", (SelectList)ViewBag.IdModel, new {htmlAttributes = new { 
     @class = "form-control" } }) 
    </div> 
</div> 
@*------------------------------------------------*@ 


@*Script for call the server side function when you changed brand combo from jquery*@ 
@*------------------------------------------------*@ 
<script type="text/javascript"> 
    $(function() { 
     $("#Brand").change(function() { 
     var selectedItem = $(this).val(); 
     $.ajax({ 
      cache: false, 
      type: "GET", 
      url: "/Home/GetModelFromBrand", // User your action and controller name 
      data: { "Brandid": selectedItem }, 
      success: function (data) { 
       $("#IdModel").empty(); 
        $.each(data, function (id, option) { 
         $("#IdModel").append($('<option> 
           </option>').val(option.IdModel).html(option.Descriptive)); 
        }); 
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        alert('Failed to retrieve states.'); 
       } 
      }); 
     }); 
    }); 
</script> 
@*------------------------------------------------*@ 

контроллер Side: -

//Get Method to load the view 
//============================================================== 
public ActionResult Index() 
{ 
    var brands = new SelectList(new[] 
           { 
            new {Libel="Brand1",}, 
            new {Libel="Brand2",}, 
           }, 
          "Libel", "Libel"); 

    //=======Suppose Brand1 have idmodels1 , idmodels2 models 
    var idmodels = new SelectList(new[] 
           { 
            new {IdModel="1",Descriptive="idmodels1",}, 
            new {IdModel="2",Descriptive="idmodels2",}, 

           }, 
           "IdModel", "Descriptive"); 
    ViewBag.Brand = brands; 
    ViewBag.IdModel = idmodels; 
    return View(); 
} 
//============================================================== 


//Get Action when changed brand combo 
//============================================================== 
[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult GetModelFromBrand(string Brandid) 
{ 
    var obj = new[] { 
          new {IdModel = 3, 
               Descriptive = "idmodels3"}, 
          new {IdModel = 4, 
               Descriptive = "idmodels4"}, 
          new {IdModel = 5, 
               Descriptive = "idmodels5"} 
         }; 


    return Json(obj, JsonRequestBehavior.AllowGet); 
} 
//==============================================================