【问题标题】:MVC (Razor) Filter DropDownListMVC (Razor) 过滤器下拉列表
【发布时间】:2015-06-27 02:46:50
【问题描述】:

我是 MVC 和 JavaScript 新手,我有一个关于 DropDownList 的问题。

我构建了一个“汽车租赁”程序,并且我有一个允许将新车添加到库存的视图。

该视图包括 2 个下拉列表(见下文):

 <div class="editor-field">
        @Html.DropDownList("ManufacturerId", string.Empty)
        @Html.ValidationMessageFor(model => model.ManufacturerId)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.ModelId)
    </div>
    <div class="editor-field">
        @Html.DropDownList("ModelId", string.Empty)
        @Html.ValidationMessageFor(model => model.ModelId)
    </div>

我希望当用户选择制造商(例如阿尔法罗密欧)时,“型号”列表框将仅显示“阿尔法米托”型号而不是完整列表...

我的控制器功能使用 ViewBag 将模型列表发送到视图,如下所示:

public ActionResult AddNewCar()
    {
        ViewBag.ManufacturerId = new SelectList(db.Manufacturers, "ManufacturerId", "ManufacturerName");
        ViewBag.ModelId = new SelectList(db.Models, "ModelId", "ModelName");

        ViewBag.BranchId = new SelectList(db.Branchs, "BranchId", "BranchName");

        return View();
    }

请指教。

谢谢, 阿尔莫格

【问题讨论】:

  • 您需要 javascript/jquery 来生成级联下拉列表。参考this example
  • 您可以使用 Ajax 将制造 ID 发布到控制器操作并为其返回模型并重新绑定模型下拉列表。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

在下拉更改事件中从 jquery 调用下面的操作方法。

 public List<carmodels> PopulateState(int manufacturerId)
        {
            var carmodelsObj = (from st in dc.Carmodels
                        where st.manufacturerId.Equals(manufacturerId)
                        select st).ToList();

            return (carmodelsObj);

        }

【讨论】:

    【解决方案2】:

    每次您的第一个下拉列表更改时,您都需要重新填充/填充您的ModelId 下拉列表(使用jquery)。执行以下操作:

    • 从更改事件的第一个下拉列表中获取ManufactureId。并拨打ajax 电话以重新填充您的第二个下拉菜单。

      $("#ManufactureId").change(function() {
      
        var manufacturerId = manufacturer$('#ManufacturerId').val();
      
      
        $.ajax({url: "~/Car/GetCarsByManufacturer", success: function(result){
      
            //re populate your second dropdown here
            //hint: you may use response.id for value
        }});
      

      });

    • 在您的控制器中创建一个函数,该函数根据选择返回汽车模型。 (在上一步中使用 ajax 调用此函数)。

      public List<carmodels> GetCarsByManufacturer(int manufacturerId)
      {
          var carmodelsObj = (from st in dc.Carmodels
                      where st.manufacturerId.Equals(manufacturerId)
                      select st).ToList();
      
          return (carmodelsObj);
      
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多