2012-08-08 64 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是一個如何做到這一點的例子。