2012-08-08 63 views
0

我有两个表筛选下拉列表中的MVC Razor视图

1.Country

  • ID
  • 国家或地区名称

和其他表

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) 

i想要根据国家下拉列表的选择填充状态下拉菜单的功能应该做什么?????

+0

您的国家下拉功能是否正常?我看到几个问题。 – Mohayemin 2012-08-08 13:34:13

+0

@Mohayemin你的工作完美 – siddharth 2012-08-08 13:36:56

回答

0

如果你已经下载的状态列表已经下载到客户端机器上,那么knockout.js就是要走的路。如果您只想下载与所选国家相关的州,那么您选择国家时,shohuld会向服务器发出AJAX呼叫,并使成功功能填充状态列表。

0

您需要使用Ajax呼叫。你可能想看看this回答我提供了类似于你的问题。

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是你的国家下拉列表和States的ID是你的国家Dropdow的ID和你的JSON格式有它接受该国的ID作为参数的操作方法,并得到了美国

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

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

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