2008-09-03 54 views
11

像这个网站上的许多其他人一样,我正在考虑转移到ASP.NET MVC的未来项目。目前,我的网站正在运行传统的ASP.NET 2.0 Web窗体,它对我们来说工作正常,所以我的另一种选择是坚持我所知道的,并通过集成的AJAX内容转移到ASP.NET 3.5。在ASP.NET MVC中实现用户控件的最佳方式是什么?

我想了解一下用户控件在ASP.NET MVC是如何工作的。我们有大量的.ASCX控件和一些复合控件。当我与网页设计师合作时,即使没有任何编程知识,也很容易让他们有效地使用ASCX控件,所以这是一个很好的补充。但是当然,缺点是页面的生命周期可能令人发狂,而且ASCX控件很难在不同的项目之间共享。复合控件是可共享的,但基本上是设计师的黑盒子。

是什么在ASP.NET MVC模型?有没有办法创建控件来解决我们使用ASCX和复合控件处理的问题?允许网页设计师轻松访问而不必担心代码被破坏,这是一个重要的考虑因素。

回答

8

要实现你做下面的调用用户控件:

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %> 

您还可以看到旧的语法,作为PR5的不再有效

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %> 

你永远不必担心关于从Web窗体移植到MVC时的代码断开问题,但是ASP.NET MVC团队在减少问题方面做了大量工作。

1

正如尼克建议的那样,您确实能够呈现您的用户控件,但很明显,传统ASP Web表单的页面循环,页面状态和回传将无法工作,从而使您的控件很可能无用。

我想你会拥有大部分的复杂控件的重写端口您的网站的MVC,而简单的控制它,例如,只提供格式,并没有回发状态,应该简单地工作。 尼克提供的代码只是在这种情况下工作。

关于更多项目之间的共享:我认为控件更像是可以在网站上共享的“可重用的HTML渲染组件”,而不是具有逻辑(如WebForms控件)的“可重用代码组件”。您的网络逻辑将/应该在页面控制器中,而不是在HTML控件中。因此,跨越更多项目共享控件将不会像WebForms案例那样有用。

1

呀,你可以做的RenderPartial。这是一个好的开始。但最终这些人将需要逻辑和其他控制器类型的东西。注意框架团队中的子控制器实现。 MvcContrib中也应该有一些东西。或者滚动你自己的。

编辑:我刚刚发布了关于这个在这里:http://mhinze.com/subcontrollers-in-aspnet-mvc/

+2

这有一个死链接。 – chrish 2011-01-20 13:11:04

1

MVC有不同的页面生命周期比较,以你的用户控件。

你可能认为这是重新写。

的ASPX是视图。你仍然需要重写,语法不同。 JavaScript将起作用。但是我几乎找不到WebControls的工作。因为MVC不再有视图状态和回传。

对于后面的代码(aspx.cs),您需要将其转换为控制器类。 Page_Load方法将不再有效。您可能将其保留至Index()方法。

模型只是您的代码背后消耗的实体类。

结论,这是一个完全重写。干杯。快乐的编码。

相关问题