我目前正在考虑在asp.net mvc中构建相对复杂页面的最佳方法。页面(以及类似的页面)将包含许多“控件”,例如购物篮,最近的新闻窗口小部件,登录控件等。换句话说,它将基于组件。
我的问题是,在asp.net MVC中构建类似内容的最佳方法是什么?在常规的webforms中,由于用户控件以及它们可以很好地自包含,因此答案很简单。在MVC中,我理解理论上我应该构建一个视图模型,其中包含我所有小部件所需的所有数据,然后在我正在构建的任何页面中呈现部分视图。 另一种方法是使用javascript动态加载小部件(想想jQuery加载),只需调用渲染部分视图的控制器即可。这样我就可以拥有一个篮子控制器,当它被召唤出一个篮子时。当然,这依赖于javascript ....
这种情况的最佳做法是什么?
由于
答案 0 :(得分:1)
您当然可以使用JavaScript来填充页面部分,但搜索引擎无法访问此内容(但这可能与您无关)。
您需要了解的是,目前无法使这些部分视图独立执行。喜欢与他们自己的控制器交谈并发布数据,同时保持其余的不变(就像可以通过WebForms和用户控件完成)。如果你认为回发和控制状态这些东西不再存在。您的“控件”发布帖子,控制器必须处理请求,然后重新创建完整视图以及所有元素值,状态和其他“用户控件”。
除非你当然与JavaScript异步。但是它不再是一个可访问的页面了。
答案 1 :(得分:0)
您可以尝试MvcContrib或Steve Sanderson "Partial Request"方式的SubControllers。
但我警告你 - 部分请求之间的沟通,我自己没有尝试过子控制器,他们可能会变得棘手并导致巨大的失败。只有在您完全确定它们完全独立时才使用它们。
无论如何 - 这是一个坏主意,应该通过控制器/视图模型继承或其他东西来避免......
答案 2 :(得分:0)
我对MVC的理解还没有使用WebForms,但是对于像这样的东西普遍接受的方法是简单地将这些东西放在ViewBag中而不是将它们包含在ViewModel中?
答案 3 :(得分:0)
您可以通过一些简单的检查向下发送主视图模型。然后根据需要呈现相应的Action。然后每个部分都可以使用它自己的viewmodel,你不需要在同一个视图模型上最初发送所有内容。
剃刀:
@if (model.ShowShoppingCart)
{
@Html.Action("Index","ShoppingCart")
}
@if (model.blah)
{
@Html.Action("Index","blah")
}