使用Ajax更新ViewBag数据ASP.NET MVC4

时间:2013-07-27 10:43:17

标签: asp.net-mvc-4

我目前有两个班级城市和区域(分别为1对多关系)。在我看来,我有2个下拉列表,一个用于所有城市,另一个用于区域(使用ViewBag填充)。选择城市时,我希望区域的下拉列表仅显示该城市的区域而不重新加载整个视图。我之前使用过Ajax但只是为了重新填充模型的数据而不是ViewBag。那我怎么能用Ajax和ViewBag来做呢?

2 个答案:

答案 0 :(得分:0)

你无法重新填充ViewBag本身。

我不知道这是不是最好的方法,但我会按照以下方式完成:

HTML:

 <div>
   <select id="city">
     options
   </select>
 </div>
 <div id="district-select">
    <select>
    </select>
 </div>

JS:

$("#city").change(function() {
   var id = $(this).val();
   $.ajax({
     type: "GET",
     url:"/CONTROLLER/GetDistrictsByCity",
     data: {cityId: id},
    success: function(data) {
       $("#district-select").html(data);
    }
   });
});

ACTION:

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

   return PartialView("_DistrictsByCity", model);

}

然后在视图“_DistrictsByCity”中您创建的所有内容都是下拉列表。然后将获取html并将其放置在id为“district-select”的div中

如果有什么不清楚,请告诉我

答案 1 :(得分:0)

使用ViewBag代替StronglyTyped(模型)是个坏主意 所以声明一个ViewModel First,然后通过ViewModel将数据传递给View