1

我知道这个问题已经被问过很多次了,但我相信我的情况有点不同,我只是在寻找处理它的最佳方法。

我有 3 个局部视图和 3 个相应的视图模型。一个用于类别、部门和产品。

一个类别包含一个部门的集合。一个部门包含一个产品的集合。

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

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

我使用 jQuery 来更新相应的部分视图作为所选类别、部门和产品的更改。

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

我想出了几个不同的选择来处理这个问题,我不确定什么是最好的方法......

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

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

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

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

4

1 回答 1

1

第四个选项是返回一个 razor 视图,其中 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)')
于 2012-07-11T16:41:28.667 回答