在mvc razor视图中过滤下拉列表

时间:2012-08-08 13:29:07

标签: asp.net-mvc-3 c#-4.0 razor

我有两张桌子

1.Country

  • ID
  • CountryName

和其他表是

2.State

  • 州ID
  • 州名
  • 国家/地区ID

我正在使用此代码在citycontroller.cs

中填写国家/地区下拉列表中的数据
ViewBag.countries = new SelectList(db.Couns.OrderBy(c => c.CountryName).ToList(), "ID", "CountryName");
create.cshtml

中的

 @Html.DropDownList("Select Country", ViewBag.countries as SelectList)

我想要根据国家/地区下拉列表的选择填写状态下拉列表的功能应该做什么?????

3 个答案:

答案 0 :(得分:0)

如果你已经下载了状态列表到客户端机器,那么knockout.js将是你要走的路。如果您只想在选择国家后下载与所选国家/地区相关的状态,则当选择国家/地区并且成功功能填充州名单时,您需要对服务器进行AJAX调用。

答案 1 :(得分:0)

您需要使用Ajax来电。您可能希望查看我提供的类似于您的问题的this答案。

答案 2 :(得分:0)

当选择国家/地区时,您可以使用jQuery ajax加载状态。

<script type="text/javascript">
 $(function(){
    $("#Country").change(function(){
      var states=""; 
      var countryId=$(this).val();
      $.getJSON("@Url.Action("GetStates","Home")/"+countryId,function(data){
           $.each(data,function(index,item){
              states+="<option value='"+item.ID+"'>"+item.StateName+"</option>";
           });
             $("#States").html(states);
      });

    });    
 });    

</script>

假设Country是您的国家/地区DropDown的ID,States是您的州Dropdow的ID,并且您有一个操作方法,该方法接受国家/地区ID作为参数并以JSON格式获取状态

public ActionResult GetStates(int id)
{
  var stateList=repo.GetStatesForCountry(id);
  return Json(stateList,JsonRequestBehaviour.AllowGet);
}

假设repo.GetStatesForCountry根据传递的国家/地区ID返回状态列表。您可以使用方法调用替换该函数调用,该方法调用将返回State类对象的列表。

建议: 我会尽量避免使用动态ViewBag / ViewData方法来填充Dropdwon并切换到更强类型的方法。 Here是一个如何做到的例子。