在单个AJAX调用上返回多个部分视图

时间:2012-07-11 16:06:33

标签: ajax asp.net-mvc-3 partial-views

我知道很久以前就已经问过这个问题,但我相信我的情况有点不同,我只是在寻找最好的方法来处理它。

我有3个部分视图和3个相应的ViewModel。一个用于分类,分类和产品。

一个类别包含一系列分部..而一个分部包含一系列产品。

在我的主视图中,我在3个部分视图上调用RenderPartial ...

@{ Html.RenderPartial("_Categories", Model.Categories); }
@{ Html.RenderPartial("_Divisions", Model.Divisions); }
@{ Html.RenderPartial("_Products", Model.Products); }

我使用jQuery将各个部分视图更新为选定的类别,部门和产品更改。

现在问题在于......当我选择一个类别时,我会用该类别的部门更新部门部分..但我还想做的是根据第一部分更新产品部分收集中的分裂,因为最初没有选择分裂。

我想出了一些不同的选择来解决这个问题,我不确定什么是最好的方法......

  1. 我可以等到我的第一个AJAX调用返回分区集合,然后再进行第二次AJAX调用以更新产品..但是出于明显的性能考虑,我不想这样做

  2. 我可以构建我的局部视图,使得Category partial视图包含Division partial视图,而Division partial视图包含Products partial视图。这样,当我的类别更改时,我可以通过一个AJAX调用更新产品。我遇到的问题是:我的部门和产品部分视图之间定义的所有静态HTML都将在每次AJAX调用时传递。

  3. 我可以修改我的AJAX调用以返回包含所有模型的JSON对象并更新视图客户端..但是,我非常喜欢能够修改视图在服务器中呈现方式的灵活性。而不是在客户端连接一堆html。

  4. 如果我可以通过一个AJAX调用返回多个局部视图,那么这将解决我的问题。但是,如果有一些我在建筑上做错了,我很乐意改变它。有什么建议?谢谢!

1 个答案:

答案 0 :(得分:1)

第四个选项是返回一个剃刀视图,其中ContentType设置为text / javascript作为响应。 Razor将呈现部分视图,但随后浏览器将执行javascript以更新DOM。

你必须确保你的ajax调用正确完成,以便它执行响应。

$("#Categories").html('@Html.RenderPartial("_Categories", Model.Categories)')
$("#Divisions").html('@Html.RenderPartial("_Divisions", Model.Divisions)')
$("#Products").html('@Html.RednerPartial("_Products", Model.Products)')