Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 什么';在ASP.NET MVC中实现用户控件的最佳方法是什么?_Asp.net Mvc_User Controls - Fatal编程技术网

Asp.net mvc 什么';在ASP.NET MVC中实现用户控件的最佳方法是什么?

Asp.net mvc 什么';在ASP.NET MVC中实现用户控件的最佳方法是什么?,asp.net-mvc,user-controls,Asp.net Mvc,User Controls,和本网站上的许多其他人一样,我正在考虑为将来的项目迁移到ASP.NET MVC。目前,我的网站运行的是传统的ASP.NET2.0Web表单,它对我们来说运行正常,所以我的另一个选择就是坚持我所知道的,并使用集成的AJAX技术迁移到ASP.NET3.5 我想知道ASP.NET MVC中的用户控件是如何工作的。我们有大量的.ASCX控件和一些复合控件。当我与网页设计师合作时,即使没有任何编程知识,也很容易让他们有效地使用ASCX控件,所以这是一个肯定的优势。但是,当然,不利的一面是页面生命周期,这可

和本网站上的许多其他人一样,我正在考虑为将来的项目迁移到ASP.NET MVC。目前,我的网站运行的是传统的ASP.NET2.0Web表单,它对我们来说运行正常,所以我的另一个选择就是坚持我所知道的,并使用集成的AJAX技术迁移到ASP.NET3.5

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


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

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

<% 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 Web表单返回的内容将不再有效,因此,您的控件很可能是无用的

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


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

是的,您可以使用RenderPartial。这是一个好的开始。但最终这些家伙将需要逻辑和其他控制器类型的东西。关注来自框架团队的分包商实现。MvcContrib中也应该很快会有一些内容。或者自己滚


编辑:我刚刚在这里发布了相关信息:

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

你可以考虑改写。

aspx是视图。您仍然需要重新编写,语法不同。 JavaScript将起作用。但我发现网络控制很难奏效。因为MVC不再有viewstate和postback

对于代码隐藏(aspx.cs),您需要将其转换为控制器类。
页面加载
方法将不再有效。您可能将其留给
Index()
方法

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

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