代码之家  ›  专栏  ›  技术社区  ›  Eric Z Beard

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

  •  11
  • Eric Z Beard  · 技术社区  · 16 年前

    像这个站点上的许多其他站点一样,我正在考虑为将来的项目迁移到ASP.NET MVC。目前,我的网站运行的是传统的ASP.NET 2.0 Web表单,它对我们来说工作正常,所以我的另一个选择就是坚持我所知道的,并使用集成的Ajax工具转移到ASP.NET 3.5。

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

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

    4 回复  |  直到 16 年前
        1
  •  8
  •   Sid M Vladimir Enchev    10 年前

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

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

    您还可以看到从pr5开始不再有效的旧语法。

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

    当从Web表单迁移到MVC时,您总是需要担心代码破坏,但是ASP.NET MVC团队已经做了大量工作来最小化问题。

        2
  •  1
  •   LorenzCK    16 年前

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

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

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

        3
  •  1
  •   Sid M Vladimir Enchev    10 年前

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

    你可以考虑重新写作。

    ASPX是 看法 . 您仍然需要重新编写,语法不同。 javascript将起作用。但是我很难找到WebControls。因为MVC不再有viewstate和postback。

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

    模型 只是您的代码隐藏使用的实体类。

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

        4
  •  1
  •   Sid M Vladimir Enchev    10 年前

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

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