2009-11-09 20 views
0

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

我的问题是,在asp.net MVC中构建类似这样的最佳方式是什么?在常规的webforms中,答案会很简单,这要归功于用户控件以及它们可以很好地自包含的事实。在MVC中,我理解理论上我应该可以构建一个视图模型,其中包含所有小部件所需的所有数据,然后在我构建的任何页面中渲染部分视图。 可以通过简单地调用控制器来渲染部分视图来使用JavaScript来“动态”加载小部件(想一想jQuery加载)。这样我就可以拥有一个篮筐控制器,当被叫出篮筐时。当然,这依赖于javascript ....

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

感谢

回答

0

您可以尝试从MvcContrib或史蒂夫桑德森的"Partial Request"方法的子控制器。

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

反正 - 这是一个坏主意,应通过控制器/视图模型继承什么的....避免

+0

我认为,后由史蒂芬·桑德森几乎清除的问题,为我。他的解决方案似乎很整洁。我想知道MS是否会在asp.net mvc future以外包含这种功能的官方机制 – Sergio

+0

如果MS会包含任何内容,可能不会有任何想法 - 可能不会,因为它与MVC模式有点矛盾。相信我 - 这个解决方案很棘手。这些'小部件'之间的沟通会杀死你。 :) –

1

当然,你可以使用JavaScript来填充页面部分,但那么这些内容将无法访问搜索引擎(但可能不关你的事)。

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

除非你使用JavaScript进行异步处理。但是,它不会再成为一个可访问的页面。

0

我的MVC的理解还不了的WebForms,不过是像这样的东西普遍接受的方法简单地将这些东西放在ViewBag中而不是将它们包含在ViewModel中?

0

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

剃刀:

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