.NET MVC应用程序中可重用性的单位是多少?

ctf*_*ord 19 asp.net asp.net-mvc

在传统的ASP.NET Web窗体应用程序中,UserControls是一种封装功能的好方法,可以重用它.但是,UserControls不适合MVC模型.他们经常大量使用ViewState,它们模糊了MVC所提出的关注点.

我的问题是,你如何最好地捆绑一个功能,以便它可以在MVC应用程序之间共享?

例如,考虑从/到日期选择器UserControl:

  • 允许用户选择两个日期,使用javascript叠加或在日,月和年中键入单独的字段
  • 可以配置为默认为今天和明天的日期或开发人员选择的日期
  • 验证用户返回的日期,以确保起始日期早于到目前为止
  • 公开可由代码隐藏访问的From和To属性

我如何在.NET MVC中最好地构建这样的东西,以便我可以轻松地重用它?

请注意,要完全模拟用户控件的功能,MVC组件必须管理提交的表单数据和验证 - 而不仅仅是演示文稿.

Gre*_*rts 6

一般来说,我同意用户控件在封装UI内容方面很好,但我认为在MVC中没有太多改变.如果我记得在经典的Asp.net项目中重新使用用户控件是一件痛苦的事情,并且从来不是真正创建可重用组件的最佳方式.您为经典ASP.net购买的大多数UI工具包都没有为您提供用户控件,它们基本上为您提供了服务器控件和javascript控件.

在您的示例中,我可能会创建或找到一个jquery(或您选择的框架)插件,它可以在客户端执行您想要的操作.您还可以围绕它构建一个C#包装器,类似于Telerik对一些jquery UI控件所做的操作.我确实认为代码隐藏,甚至viewstate这个词会越多,你进入MVC就会从你的词汇中消失.

如果你看一下MVC的开源项目,你会得到你应该做的答案.

  • MVC的Contrib应用程序通过创建扩展方法和助手增加了很多功能.它们的网格控制是创建可以在项目中使用的可重用组件的典型方法

  • Telerik创建了一些包含jquery控件并进行资产管理的扩展.

  • 最后,我想如果你展望未来,MVC有一些领域,如果我正确解释它将使你能够将你的项目分成多个较小的项目.