Asp.net mvc 4 使用Ajax更新ViewBag数据ASP.NET MVC4

Asp.net mvc 4 使用Ajax更新ViewBag数据ASP.NET MVC4,asp.net-mvc-4,Asp.net Mvc 4,我目前有两个类调用城市和地区(分别为1对多关系)。在我看来,我有两个下拉列表,一个用于所有城市,另一个用于地区(使用ViewBag填充)。选择城市后,我希望district的下拉列表仅显示该城市的地区,而不重新加载整个视图。我以前使用过Ajax,但只是为模型而不是ViewBag重新填充数据。那么,如何使用Ajax和ViewBag实现这一点呢?您无法重新填充ViewBag本身 我不知道这是否是最好的方法,但我会用以下方法: HTML: 行动: public ActionResult GetDist

我目前有两个类调用城市和地区(分别为1对多关系)。在我看来,我有两个下拉列表,一个用于所有城市,另一个用于地区(使用ViewBag填充)。选择城市后,我希望district的下拉列表仅显示该城市的地区,而不重新加载整个视图。我以前使用过Ajax,但只是为模型而不是ViewBag重新填充数据。那么,如何使用Ajax和ViewBag实现这一点呢?

您无法重新填充ViewBag本身

我不知道这是否是最好的方法,但我会用以下方法:

HTML:

行动:

public ActionResult GetDistrictsByCity(Guid cityId){
   //GET Districts that is linked to the cityId

   return PartialView("_DistrictsByCity", model);

}
然后在视图“\u DistrictsByCity”中,您创建的是dropdownlist。然后,该html将被获取并放置在id为“district select”的div中


如果有任何不清楚的地方请告诉我

使用ViewBag而不是StronglyTyped(型号)是个坏主意
因此,请先声明一个ViewModel,然后通过ViewModel将数据传递给View(视图模型)

您到目前为止尝试了什么?我会这样做,但我在这里绝对不是专家。如果能听到一位专家这样做,那就太棒了。
$("#city").change(function() {
   var id = $(this).val();
   $.ajax({
     type: "GET",
     url:"/CONTROLLER/GetDistrictsByCity",
     data: {cityId: id},
    success: function(data) {
       $("#district-select").html(data);
    }
   });
});
public ActionResult GetDistrictsByCity(Guid cityId){
   //GET Districts that is linked to the cityId

   return PartialView("_DistrictsByCity", model);

}