【问题标题】:How do I use multiple user controls on an aspx page without making the same database calls in more than one control?如何在一个 aspx 页面上使用多个用户控件而不在多个控件中进行相同的数据库调用?
【发布时间】:2013-10-24 12:40:35
【问题描述】:

我目前在一个项目中,其中每个 .aspx 页面都由多个用户控件(.ascx 文件)组成。在某些情况下,单个页面的多个用户控件正在调用数据库以获取相同的数据。两个用户控件可能会为同一个客户对象调用数据库来执行他们各自情况所需的任务。毕竟,有些网页最终会调用相同的数据库 10 次或更多次,因为每个用户控件都需要数据来完成它正在做的事情。这似乎效率不高。

使用 ASP.NET Webforms 处理这种情况的最佳实践是什么?我们已经尝试缓存数据库调用,但感觉并不是解决问题的可靠方法,尽管它有助于提高性能。在使用 MVC 时,我可以传入一个包含特定页面所需的所有数据的强类型对象,并且只对数据进行一次查询。如何使用 WebForms 实现类似的功能?

【问题讨论】:

    标签: c# asp.net user-controls webforms


    【解决方案1】:

    最佳实践与任何 OO 编程相同:不要重复自己。

    在这种情况下,不是让用户控件查询数据库以获取他们的数据,而是让数据通过属性传递控件。您甚至可以使用数据绑定,就像“真正的”服务器控件一样。

    顺便说一句,没有什么能阻止您将强类型对象传递给用户控件,就像在 MVC 中一样:

    在 MyControl.ascx.cs 中:

    public MyControlModel Model {get; set;}
    

    然后在控件数据绑定前设置调用页面Model

    【讨论】:

    • 约翰,我有一种感觉,就像你所描述的那样是可能的,但你刚刚确认它是。很高兴知道。在这种情况下,您会说 .aspx 页面的职责类似于 MVC 控制器的职责吗?
    • 它没有正式化,但是是的。我更愿意告诉用户控件他们应该显示什么数据;在 PostBack 上从他们那里收集任何输入数据,然后他们可以在有趣的事情发生时引发事件。与嵌套在用户控件内的用户控件相同的模式。
    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2014-02-13
    • 1970-01-01
    • 2019-09-26
    • 2012-10-30
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多