繁体   English   中英

从其他类访问页面上的页面/控件的最佳实践?

[英]Best practice for accessing Page / controls on Page from other classes?

我正在重构一些代码,我已经开始这样做了:

protected void Page_Init(object sender, EventArgs e)
{
    Logger.Info("Page Initialization.");
    //Provides highlighting/docking functionality at the start, but overshadows controls in more complex scenarios.
    RadDockZone1.Visible = (RadControlStates.SplitterStates.Count == 0);

    ControlRegeneration.RegenerateReportMenu(lstBxHistorical, lstBxCustom);
    ControlRegeneration.RegeneratePaneChildren(RadPane2);
    ControlRegeneration.RegenerateDockZones(Page);
    ControlRegeneration.RegenerateDocks(RadDockLayout1, RadDock_Command, UpdatePanel1);
}

我想知道将Page和Page控件传递给像这样的其他函数是否是一个好习惯。

我正在考虑创建一个单例,它将保存对相关页面控件的引用,然后通过该实例访问控件。

就像是...

public class DashboardPageControlsRepository
{
    private static readonly DashboardPageControlsRepository instance = new      DashboardPageControlsRepository();

    private DashboardPageControlsRepository() { }

    private Control myPanel;

    public static DashboardPageControlsRepository Instance
    {
        get { return instance; }
    }

    public void SetPageState(Page page)
    {
        myPanel = Utilities.FindControlRecursive(page, "UpdatePanel1")
    }

    public Control Panel
    {
        get { return myPanel; }
    }
}

然后,在页面初始化之前,我会去抓取所有控件 - 允许我通过这里访问它们而不是传递它们。

有关如何处理这个问题的任何想法?

以这种方式创建单例的问题在于,静态实例将在AppDomain的生命周期中存在(直到它被回收)。 最重要的是,访问单例的多个请求将试图独立地改变单例的状态。

除了作为控件引用的容器之外,此存储库还提供哪些服务?

我要提到的另一件事是,不要太过专门化你的方法,你应该考虑方法设计中最不需要的类型方法,例如你目前有:

public void SetPageSize(Page page)

其中该方法只对访问System.Web.UI.Control类型的Controls集合非常感兴趣。 您可以将方法重新定义为:

public void SetPageSize(Control control)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM