【问题标题】:Building a complex page in asp.net MVC在 asp.net MVC 中构建一个复杂的页面
【发布时间】:2009-11-09 09:42:58
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: asp.net-mvc viewmodel


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您可以尝试使用 MvcContrib 或 Steve Sanderson 的 "Partial Request" 方法中的子控制器。

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

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

      【讨论】:

      • 我认为 steven Sanderson 的帖子为我解决了这个问题。他的解决方案似乎很巧妙。我想知道 MS 是否会在 asp.net mvc 期货之外包含任何官方机制来实现这种功能
      • 不知道 MS 是否会包含任何东西 - 可能不会,因为它与 MVC 模式有点矛盾。相信我——这个解决方案很棘手。这些“小部件”之间的交流会杀死你。 :)
      【解决方案3】:

      我对 MVC 的理解尚未与 WebForms 相提并论,但是对于像这样的东西,将这些东西简单地放入 ViewBag 而不是将它们包含在 ViewModel 中,这是一种普遍接受的方法吗?

      【讨论】:

        【解决方案4】:

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

        剃须刀:

         @if (model.ShowShoppingCart)
         {
             @Html.Action("Index","ShoppingCart")
         }
         @if (model.blah)
         {
             @Html.Action("Index","blah")
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-30
          • 2021-01-10
          • 1970-01-01
          • 2013-03-06
          • 1970-01-01
          相关资源
          最近更新 更多