在页面之间传递多个下拉列表项

用户名

我使用Asp.Net MVC。我的页面上有4个下拉列表。

1-汽车公司(40件)2-车型(30件)3-年(20件)4-发动机(20件)

当用户选择此项时,转到详细信息页面。在详细信息页面中,我要填充ddl并选择用户。

我对此有一些想法,但我不确定它的正确方法。

1-将下拉列表发布到控制器,然后返回到详细信息页面

2-将下拉列表写入Cookie

或其他任何想法?

y州

创建一个这样的视图模型

public class FilterVM
{
  public List<SelectListItem> Makes{ set;get;}
  public int SelectedMake { set;get;}

  public List<SelectListItem> Models { set;get;}
  public int SelectedModel { set;get;}

  public List<SelectListItem> Years{ set;get;}
  public int SelectedYear { set;get;}

  public List<SelectListItem> Engines{ set;get;}
  public int SelectedEngine { set;get;}

  public FilterVM()
  {
    Makes=new List<SelectListItem>();
    Models=new List<SelectListItem>();
    Years=new List<SelectListItem>();.
    Engines=new List<SelectListItem>();
  }
}

现在在您的GET动作中

public ActionResult Search()
{
  var vm=new FilterVM();
  vm.Makes=LoadMakesFromSomewhere();
  return View(vm);
}
private List<SelectListItem> LoadMakesFromSomewhere()
{
  var lst=new List<SelectListItem>();
  lst.Add(new SelectListItem { Value="1", Text="Ford"});
  lst.Add(new SelectListItem { Value="2", Text="Honda"});
  return lst;
}

并且在您的视图中,这是您的FilterVM的强类型。我们将编写一些JavaScript来处理下拉菜单的change事件,以便它将读取选定的项目值并发送ajax请求以获取下一个下拉菜单的内容。

@model FilterVM
@using(Html.BeginForm())
{
  <label>Make</label>
  @Html.DropDownListFor(s=>s.SelectedMake,Model.Makes,"Select")

  <label>Make</label>
  @Html.DropDownListFor(s=>s.SelectedModel,Model.Models,"Select")

  <label>Make</label>
  @Html.DropDownListFor(s=>s.SelectedYear,Model.Years,"Select")

  <label>Make</label>
  @Html.DropDownListFor(s=>s.SelectedEngine,Model.Engines,"Select")

  <input type="submit" />
}
<script type="text/javascript">
 $(function(){
    //code to load Models dropdown when user selects Make
    $("#SelectedMake").change(function(){
     var items="";
     $.getJSON("@Url.Action("GetModels","Car")/"+$(this).val(),function(res){
         $.each(function(index,item){
           items+="<option value='"+item.ID+'>"+item.Name+"</option>";
         });
         $("#SelectedModel").html(items); 
     });
    });

    //Write other dropdown  filling code like above       
 });
</script>

现在,您应该有一个GetModels方法,方法可以接受Selected Make的ID,并以JSON格式返回模型。

public ActionResult GetModels(int id)
{
  var modelList=repositary.GetModelsFromMakeID(id);
  return Json(modelList,JsonRequestBehaviour.AllowGet);
}

您要返回的JSON应该看起来像这样(以及每个项目中的ID和Name。

[
    {
        "ID": 4,
        "Name": "Accord"
    },
    {
        "ID": 5,
        "Name": "CRV"
    }
]

也为其他下拉菜单编写change事件处理程序。最后,当用户发布表单时,可以检查SelectedMake,SelectedModel,SelectedYear属性值。

[HttpPost]
public ActionResult Search(FilterVM model)
{
  check for model.SelectedMake, model.SelectedYear etc..
  //to do : Get result and show in a view/redirect.
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章