在传统的ASP.NET Web表单应用程序中,UserControls是封装功能以便重用的好方法。然而,UserControls并不能很好地适应MVC模型。他们经常大量使用ViewState,他们模糊了MVC所提倡的关注点的分离。
我的问题是,如何最好地捆绑一段功能,以便它可以在MVC应用程序之间共享?
例如,考虑一个from/to日期选择器UserControl,它:
通过使用choosing
访问的属性
怎样才能最好地在.NET MVC中构建这样的东西,以便我可以轻松地重用它?
请注意,为了完全模拟用户控件的功能,MVC组件必须管理提交的表单数据和验证-而不仅仅是表示。
发布于 2009-09-25 04:30:37
总的来说,我同意用户控件在封装UI方面很好,但我不认为MVC中有太多真正的变化。如果我没记错的话,在传统的Asp.net项目中重用用户控件是一件痛苦的事情,而且从来都不是真正创建可重用组件的最佳方式。你为经典的ASP.net购买的大多数UI工具包都没有给你提供用户控件,它们本质上给你提供了服务器控件和javascript控件。
在您的示例中,我可能会创建或找到一个jquery (或您选择的框架)插件,它可以在客户端执行您想要的操作。您还可以围绕它构建一个C#包装器,类似于Telerik对一些jquery UI控件所做的操作。我确实认为,随着您更深入地了解,甚至视图状态这个词都会从您的词汇表中消失。
如果你看看MVC有哪些开源项目,你就会得到关于你应该做什么的答案。
发布于 2009-09-25 12:27:41
发布于 2009-09-25 22:04:11
在考虑了别人的有用答案后,我将尝试回答我自己的问题。
在我看来,在MVC中模拟UserControls的关键困难在于它们横切了MVC旨在分离的关注点。我的例子中的from/to date选择器UserControl包含了模型、视图、控件和交互的元素。UserControls将所有这些捆绑在一起的能力正是它们不能很好地融入MVC的原因。
这意味着在MVC中创建一个psuedo-UserControl需要四个独立的部分:
ModelBinder很重要,因为它处理从用户返回的数据。如果没有它,每个想要在任何视图中显示to/from日期选择器的Controller都必须知道如何组合六个postdata字段-以及如何处理它们无效或某些字段丢失的情况。
https://stackoverflow.com/questions/1474303
复制相似问题