使用Web用户控件而不是Web窗体

Dal*_*Dal 9 asp.net controls

过去两年我一直在使用ASP.NET(C#).我学到了很多,但还有更多要学习:)

我已经使用MasterPages,'Web用户控件'来处理标题,导航,页脚等内容.

我从未真正理解的一件事是为您的内容和逻辑使用"Web用户控件"的做法;

Home.aspx ------ Home.ascx
AboutUs.aspx ----- AboutUs.ascx
Ordering.aspx ---- Ordering.acsx
Run Code Online (Sandbox Code Playgroud)

在过去的几个月里,我一直在使用这个结构的一些项目.我知道这实际上是常见的做法,但我并不完全了解全部的好处.

我记得当我之前尝试过这种方法时,最终出现了像Gridview这样的控件的可怕的viewstate问题...一旦我把所有逻辑输出并放入.aspx页面,一切正常.

我现在意识到,也许我需要将Gridview添加到viewstate集合中......但这只会加深我理解为什么使用这种方法的困难 - 给定viewstate问题.

我完全理解"Web用户控件"在诸如标题,菜单,页脚等内容方面的优势......任何涉及重复的项目,但我看过的项目都有非常具体的页面/控件 - 换句话说,它不太可能要在其他任何地方重用--aspx页面只包含一个带有内容和逻辑的控件(.ascx),它只会在该页面上使用,而不是其他地方.

忽略"代码重用",这种方法还有哪些其他好处?

Ed *_*d B 5

用户控件在Web表单中使用...它们不用于替换


编辑:

在这种情况下,我认为使用该方法没有任何好处(除了重用之外).它实际上可能有更多的开销,因为页面循环事件必须从页面传递到控件.


Bri*_*ott 2

我认为您的 PageA.aspx -> PageA.ascx 示例实际上是一个强调 Web 用户控件优点的糟糕示例。从这些“页面”控件示例退后一步,思考 Web 用户控件的主要用途。它们的目的是将 UI 和功能封装在一个离散的块中。

我认为最大的好处是知道,如果我作为 Web 用户控件开发类似评论表单的东西并将其部署到我的网站页面中,我将在解决方案中更新一个项目,该项目将更新它所在的每个页面。

另一个不太明显的好处是许多内容管理系统(例如 Umbraco)使用 Web 用户控件作为插件。这样,您就可以为最终用户/编辑者开发插件,以根据他们认为合适的方式选择并放入页面内容中。