0

我目前正在考虑在 asp.net mvc 中构建一个相对复杂的页面的最佳方法。该页面(以及类似的页面)将包含许多“控件”,例如购物篮、最近的新闻小部件、登录控件等等。换句话说,它将非常基于组件。

我的问题是,在 asp.net MVC 中构建这样的东西的最佳方法是什么?在常规的网络表单中,由于用户控件以及它们可以很好地自包含的事实,答案会很简单。在 MVC 中,我知道理论上我可能应该构建一个视图模型,其中包含所有小部件所需的所有数据,然后在我正在构建的任何页面中呈现部分视图。另一种方法是否可以通过简单地调用呈现部分视图的控制器来使用javascript“动态”加载小部件(想想jQuery加载)。这样我就可以有一个篮子控制器,当它被调用时会渲染出一个篮子。当然,这依赖于javascript....

这种情况的最佳做法是什么?

谢谢

4

4 回答 4

1

您当然可以使用 JavaScript 来填充页面部分,但是搜索引擎将无法访问此内容(但这可能与您无关)。

您需要了解的是,目前没有办法让这些局部视图独立执行。就像与他们自己的控制器交谈并发布数据,而其余部分保持不变(就像它可以通过 WebForms 和用户控件完成)。如果您认为回发和控制状态这些东西不再存在。您的“控件”发布帖子,控制器必须处理请求,然后重新创建完整的视图以及所有元素值、状态和其他“用户控件”。

当然,除非您使用 JavaScript 异步执行此操作。但那样它就不再是一个可访问的页面了。

于 2009-11-09T09:47:09.883 回答
0

您可以尝试 MvcContrib 中的SubControllers或 Steve Sanderson的“部分请求”方法。

但我警告你——(部分请求,我自己没有尝试过子控制器)之间的通信可能会变得棘手并导致巨大的失败。仅当您完全确定它们完全独立时才使用它们。

无论如何 - 这是一个坏主意,应该通过控制器/视图模型继承或其他东西来避免......

于 2009-11-09T10:03:48.830 回答
0

我对 MVC 的理解还没有达到 WebForms,但是对于像这样的东西来说,一般接受的方法是将这些东西简单地扔到 ViewBag 中而不是将它们包含在 ViewModel 中吗?

于 2011-09-04T14:24:02.203 回答
0

您可以发送一个带有一些简单检查的主视图模型。然后根据需要呈现适当的操作。然后每个部分都可以使用它自己的视图模型,并且您不需要最初在同一个视图模型上发送所有内容。

剃刀:

 @if (model.ShowShoppingCart)
 {
     @Html.Action("Index","ShoppingCart")
 }
 @if (model.blah)
 {
     @Html.Action("Index","blah")
 }
于 2011-11-15T17:42:23.100 回答