UserControl等效于MVC3?

Bru*_*oLM 18 c# asp.net-mvc asp.net-mvc-3

在Web表单上我们有UserControls.这些控件具有代码隐藏功能,可以在不依赖于其他内容的不同项目/解决方案中使用.

我想创建一个控件来呈现一些控件,并且会有一些"触发事件"的链接.我希望它们不会附在我的网站上,我希望能够在另一个网站上使用相同的"控件".MVC中的等价物是什么?是否可以使用控制器编译视图并在其他地方使用DLL?

mar*_*ind 17

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

public static IHtmlString MyControl(this HtmlHelper helper, string value) {
    return new HtmlString("<p>" + value + "</p>");
}
Run Code Online (Sandbox Code Playgroud)

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

你通常从你的视图中调用它们(这个例子使用了MVC 3中新增的Razor语法)

@Html.MyControl("my value")
Run Code Online (Sandbox Code Playgroud)

虽然表面上的html帮助程序像用户控件一样发出标记,但是存在显着差异.最重要的一点是MVC视图没有WebForms页面生命周期的概念.这意味着与用户控件不同,html助手会在一次传递中呈现.WebForms中没有像Init,Load,Render等多个阶段,您可以在其中连接服务器端事件以与页面上的其他控件进行交互.

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

  • @jfar`RenderAction()`由于同样的原因不能立即适应.基本上任何需要定义视图(以.aspx或.cshtml文件形式)的内容都不能轻易地从多个项目中重用.我想这进一步强调了WebForms和MVC范式从根本上是不同的:) (2认同)