11

与该站点上的许多其他人一样,我正在考虑为未来的项目迁移到 ASP.NET MVC。目前我的网站运行的是传统的 ASP.NET 2.0 Web 窗体,它对我们来说工作正常,所以我的另一个选择就是坚持我所知道的并使用集成的 AJAX 东西迁移到 ASP.NET 3.5。

我想知道用户控件如何在 ASP.NET MVC 中工作。我们有大量的.ASCX控件和一些复合控件。当我与网页设计师一起工作时,很容易让他们有效地使用 ASCX 控件,即使没有任何编程知识,所以这是一个明确的优势。但是当然缺点是页面生命周期,这可能是令人抓狂的,以及 ASCX 控件难以在不同项目之间共享的事实。复合控件是可共享的,但对设计师来说基本上是一个黑盒子。

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

4

4 回答 4

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 团队在最大限度地减少问题方面做得很好。

于 2008-09-03T13:58:44.093 回答
1

正如尼克建议的那样,您确实能够呈现您的用户控件,但显然传统 ASP Webforms 的页面周期、页面状态和回发将不再起作用,从而使您的控件很可能无用。

我认为您必须重写大多数复杂的控件才能将您的网站移植到 MVC,而简单的控件(例如,仅提供格式且没有回发状态)应该可以正常工作。Nick 提供的代码在这种情况下可以正常工作。

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

于 2008-09-03T14:08:45.163 回答
1

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

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

于 2008-09-05T01:59:02.030 回答
1

与您的用户控件相比,MVC 具有不同的页面生命周期。

您可以考虑重新编写。

aspx 是视图。您仍然需要重新编写,语法不同。JavaScript 将起作用。但我几乎找不到 WebControls 会起作用。因为 MVC 不再有视图状态和回发。

对于后面的代码 (aspx.cs),您需要将其转换为Controller类。 Page_Load方法将不再有效。你可能把它留给Index()方法。

模型只是您的代码背后使用的实体类。

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

于 2011-03-04T09:47:22.737 回答