首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UserControl等价于MVC3?

UserControl等价于MVC3?
EN

Stack Overflow用户
提问于 2011-01-27 00:20:23
回答 2查看 11.6K关注 0票数 18

在网络表单上我们有UserControls。这些控件有代码隐藏,可以在不同的项目/解决方案中使用,而不依赖于其他东西。

我想要创建一个控件,该控件呈现一些控件,并具有一些链接,这些链接将“触发事件”。我希望他们不要附加在我的网站上,我希望能够使用相同的“控制”在另一个网站。,什么是MVC中的等价物?可以用控制器编译视图并在其他地方使用DLL吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-27 01:01:30

与MVC中的WebForms风格的可重用用户控件最接近的功能是html帮助程序。html助手是返回一些标记的方法。建议的方法是以HtmlHelper或MVC页面的其他属性的扩展方法的形式来实现它们:

代码语言:javascript
复制
public static IHtmlString MyControl(this HtmlHelper helper, string value) {
    return new HtmlString("<p>" + value + "</p>");
}

您可以将此方法直接添加到MVC项目中,也可以将其添加到单独的类库中。类库唯一需要引用的是用于System.Web.Mvc.dll引用的HtmlHelper (如果使用更多类型,它也可能需要System.Web.dll )。

您通常会像这样从视图中调用它们(本例使用MVC 3中新的Razor语法)

代码语言:javascript
复制
@Html.MyControl("my value")

虽然从表面上看,html帮助程序发出的标记就像用户控件一样,但它们之间有很大的差别。最重要的是MVC视图没有WebForms页面生命周期的概念。这意味着与用户控件不同,html帮助程序是在一次传递中呈现的。在WebForms中没有诸如Init、Load、Render等多个阶段,您可以将服务器端事件与页面上的其他控件连接起来。

根据您正在讨论的特定事件类型,可能有适当的以MVC为中心的技术来解决您的任务。你能提供更多关于你想做什么的细节吗?Html助手可以非常强大。例如,内置的MVC输入控件(如TextBoxFor )可以连接客户端验证等。

票数 17
EN

Stack Overflow用户

发布于 2011-01-27 00:27:55

由于“事件”在MVC中并不像在WebForms中那样存在,所以满足您的所有需求将是相当棘手的。

对于UserControl等效的UI层,您应该使用一个PartialView,可能位于视图/共享/模板文件夹中,这取决于您是否希望它与特定的模型类型相关联。

对于后端( "event"),您可能应该实现一个Controller,它可以从您的链接发送请求,并且支持您需要的所有行为。

要在各种项目中使用这些特性,您必须同时复制控制器和模板/部分视图。诚然,它可能不像使用WebForms那样简单,但这是一个与关注点明显分离的限制,在一个设计良好、基于层的WebForms应用程序中也是显而易见的。

更新回应我提到的对分离关注点的“限制”的评论:

控制器当然可以在一个单独的程序集中分发,它自己的测试程序集等等。但是,包括控制器程序集(或程序集)和带有前端代码的部分视图/模板可以说是比仅仅用它的代码复制用户控件(存储在彼此旁边)还要做的另一件事(可能失败)。

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

https://stackoverflow.com/questions/4811732

复制
相关文章

相似问题

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