我使用Asp.Net MVC。我的页面上有4个下拉列表。
1-汽车公司(40件)2-车型(30件)3-年(20件)4-发动机(20件)
当用户选择此项时,转到详细信息页面。在详细信息页面中,我要填充ddl并选择用户。
我对此有一些想法,但我不确定它的正确方法。
1-将下拉列表发布到控制器,然后返回到详细信息页面
2-将下拉列表写入Cookie
或其他任何想法?
创建一个这样的视图模型
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] 删除。
我来说两句