首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET MVC应用程序中的可重用性单位是什么?

.NET MVC应用程序中的可重用性单位是什么?
EN

Stack Overflow用户
提问于 2009-09-24 21:40:10
回答 7查看 1.9K关注 0票数 19

在传统的ASP.NET Web表单应用程序中,UserControls是封装功能以便重用的好方法。然而,UserControls并不能很好地适应MVC模型。他们经常大量使用ViewState,他们模糊了MVC所提倡的关注点的分离。

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

例如,考虑一个from/to日期选择器UserControl,它:

通过使用choosing

  • validates覆盖或在单独的字段中键入日、月和年,
  • 允许用户选择两个日期。可以将
  • 配置为缺省为今天和明天的日期,或缺省为开发人员javascript的日期从用户返回的日期,以确保起始日期早于
  • 公开的、可由代码隐藏的

访问的属性

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

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-25 04:30:37

总的来说,我同意用户控件在封装UI方面很好,但我不认为MVC中有太多真正的变化。如果我没记错的话,在传统的Asp.net项目中重用用户控件是一件痛苦的事情,而且从来都不是真正创建可重用组件的最佳方式。你为经典的ASP.net购买的大多数UI工具包都没有给你提供用户控件,它们本质上给你提供了服务器控件和javascript控件。

在您的示例中,我可能会创建或找到一个jquery (或您选择的框架)插件,它可以在客户端执行您想要的操作。您还可以围绕它构建一个C#包装器,类似于Telerik对一些jquery UI控件所做的操作。我确实认为,随着您更深入地了解甚至视图状态这个词都会从您的词汇表中消失。

如果你看看MVC有哪些开源项目,你就会得到关于你应该做什么的答案。

  • MVC Contrib应用程序通过创建扩展方法和帮助器添加了许多功能。他们的网格控件是一种典型的创建可重用组件的方法,您可以跨projects
  • Telerik,创建一些扩展来包装jquery控件和做资产management.
  • Finally我认为如果您展望未来,MVC有areas,如果我理解正确,它将使您能够将项目拆分为多个较小的项目。
票数 6
EN

Stack Overflow用户

发布于 2009-09-25 12:27:41

除了已经提出的建议之外,ASP.NET MVC v2还将拥有通用的模板化输入控件,参见here。您可以阅读其他人如何使用类似的技术,例如,here

我们恰好有一个方法调用来生成表单元素“Html.InputFor”。作为“InputFor”的一部分,它检查一个输入规范,该规范收集PropertyInfo、任何属性、类型、调用的任何修饰符,并选择适当的InputBuilder。调用InputFor(p => p.Id),Id是GUID吗?这将创建一个隐藏的输入元素。调用InputFor(p => p.Customer.Address),地址是复杂类型吗?,它查找与类型

同名的分部

票数 2
EN

Stack Overflow用户

发布于 2009-09-25 22:04:11

在考虑了别人的有用答案后,我将尝试回答我自己的问题。

在我看来,在MVC中模拟UserControls的关键困难在于它们横切了MVC旨在分离的关注点。我的例子中的from/to date选择器UserControl包含了模型、视图、控件和交互的元素。UserControls将所有这些捆绑在一起的能力正是它们不能很好地融入MVC的原因。

这意味着在MVC中创建一个psuedo-UserControl需要四个独立的部分:

  • 模型类-在本例中为Interval类或类似的
  • 知道如何将模型呈现为HTML的PartialView
  • 在PartialView的HTML
  • 上进行交互层的jQuery脚本可以将postdata反序列化到模型类的实例中的ModelBinder。

ModelBinder很重要,因为它处理从用户返回的数据。如果没有它,每个想要在任何视图中显示to/from日期选择器的Controller都必须知道如何组合六个postdata字段-以及如何处理它们无效或某些字段丢失的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1474303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档