【问题标题】:Build an empty MVC DropdownListFor for a Cascade Sub-List为级联子列表构建一个空的 MVC DropdownListFor
【发布时间】:2012-10-14 14:41:11
【问题描述】:

我想建立一个空的 Dropdownlistfor 来接收之前 Dropdownlisfor 选择的结果:

实际视图:

    <div id="makes">
        @Html.DropDownListFor(m => m.Make_Id, Model.MakeList, HeelpResources.DropdownlistMakeFirstRecord)
    </div>
    <div id="models">
        @Html.DropDownListFor(m => m.Model_Id, Model.ModelList, HeelpResources.DropdownlistModelFirstRecord)
    </div>        

实际的控制器(为了工作,我必须构建一个空的 SelectedList,但这样做似乎很奇怪):

   public virtual ActionResult Create()
    {
        // Build the Dropdownlist for the Makes
        var makesDto = _makeService.ListAllMakes();
        var makesViewModel = Mapper.Map<IList<MakeDto>, IList<MakeViewModel>>(makesDto);

        // Build the Dropdownlist for the Models
        var makeId = -1;
        var modelsDto = _modelService.ListModelByMake(makeId);
        var modelsViewModel = Mapper.Map<IList<ModelDto>, IList<ModelViewModel>>(modelsDto);

        // Build the ViewModel to return to the View
        CreateAdViewModel viewModel = new CreateAdViewModel();
        viewModel.MakeList = new SelectList(makesViewModel, "ID", "Name");
        viewModel.ModelList = new SelectList(modelsViewModel, "ID", "Name"); 

        return View(viewModel);
    }

有没有办法构建这样的东西: @Html.DropDownListFor(m => m.Model_Id, null)

然后从控制器中删除 // Build the Dropdownlist for the Models?

谢谢

【问题讨论】:

    标签: asp.net-mvc view html.dropdownlistfor


    【解决方案1】:

    找到了一个我认为最好的解决方案,因为它没有服务调用来构建空的 dropdroplist 并且它是强类型的:

    @Html.DropDownListFor(m => m.Model_Id, Enumerable.Empty<SelectListItem>(), HeelpResources.DropdownlistModelFirstRecord)
    

    【讨论】:

    • 如果您将此标记为您自己问题的答案,那就太好了。
    • “HeelpResources.DropdownlistModelFirstRecord”有什么用?
    • 这是您要放在第一个选项中的文本,例如“请选择一个选项...”,但基于资源字符串,因此您可以根据位置的语言网站显示此文本(法语/葡萄牙语/英语)
    【解决方案2】:

    以下工作正常

    @Html.DropDownListFor(m => m.Model_Id, **new SelectList(new List<string>()**));
    

    【讨论】:

      【解决方案3】:

      我个人会用一点 jQuery 和一个额外的局部视图来做到这一点。您的表单可能如下所示:

      <div id="makes">
              @Html.DropDownListFor(m => m.Make_Id, Model.MakeList, HeelpResources.DropdownlistMakeFirstRecord)
      </div>
      <div id="models">
      
      </div>
      
      <script type="text/javascript">
      $(function(){
         $("#Make_Id").change(function(){
             $("#models").load("/Controller_Name/GetModels/" + this.val());
         }
      });
      </script>  
      

      然后在你的控制器中:

      public ActionResult GetModels(int id)
      {
         ViewBag.DdlModels = new SelectList(rep.GetModelsForCar(id), "Id", "Name");
         return PartialView();
      }
      

      然后将您的下拉列表粘贴在 GetModels 部分视图中

      【讨论】:

      • 模型下拉菜单在局部视图的视图中被强输入?它会将 Model_Id 从下拉列表中选择的值传递给 viewmodel 内的控制器?
      猜你喜欢
      • 1970-01-01
      • 2011-07-05
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2019-01-09
      • 1970-01-01
      相关资源
      最近更新 更多