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

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

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

有帮助吗?

解决方案

要实现用户控件,请执行以下调用:

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

您可能还会看到从 PR5 开始不再有效的旧语法

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

从 Web 窗体迁移到 MVC 时,您总是需要担心代码破坏,但是 ASP.NET MVC 团队在最大限度地减少问题方面做了出色的工作。

其他提示

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

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

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

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

你可以考虑重写一下。

aspx 是 看法. 。您仍然需要重新编写,语法不同。JavaScript 可以工作。但我几乎找不到 WebControls 可以工作。因为MVC不再有viewstate和postback了。

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top