在同一个usercontrol的多个ASPX页面上实现方法

时间:2013-09-14 15:47:33

标签: c# asp.net optimization

所以,这是我的情况。我有多个ASPX页面(总共11个),每个页面都包含一组不同的字段。

我实现的方法是在所有这些页面上复制相同的代码,进行一些修改并执行。防爆。在第1页上删除对Page01按钮的任何处理,在第2页上我删除了Page02按钮的事件处理程序......依此类推。

好消息?这很好用(回发,保存等)。 坏消息?这很乏味,特别是如果我需要向控件ASCX(TMControl.ASCX)添加新事件。然后,我必须重新编码所有这11个ASPX页面,将它们连接到ASCX等。人。

问题:有没有办法以不重复努力的方式做到这一点?

protected void Page_Load(object sender, EventArgs e)
{
    Page.Title = "...";

    wucTMControls = LoadControl("TMControls.ascx") as TMControls;
    wucTMControls.btnPage02Click += new EventHandler(wucTMControls_btnPage02Click);
    wucTMControls.btnPage03Click += new EventHandler(wucTMControls_btnPage03Click);
    //----------- 
    // similar lines of eventhandling code exists here for pages 4 thru 11, 
    // which I removed for readability
    //----------- 
    wucTMControls.btnSavePageClick += new EventHandler(wucTMControls_btnSavePageClick);
    wucTMControls.btnSavePayeeClick += new EventHandler(wucTMControls_btnSavePayeeClick);
    phTMControls.Controls.Add(wucTMControls);
    if (!IsPostBack)
    {
        loadPage01();
    }
}

void wucTMControls_btnPage02Click(object sender, EventArgs e) { if (noChangesOnThisPage()) wucTMControls.btnPage02Clicked(); }
void wucTMControls_btnPage03Click(object sender, EventArgs e) { if (noChangesOnThisPage()) wucTMControls.btnPage03Clicked(); }
//----------- 
// similar lines of eventhandler code exists here for pages 4 thru 11, 
// which I removed for readability
//----------- 
void wucTMControls_btnSavePayeeClick(object sender, EventArgs e) { }

1 个答案:

答案 0 :(得分:1)

当您必须在不同页面上执行相同任务时,将使用UserControl。在我看来,你的UserControl在它使用的所有页面上做了不同的事情。此外,它具有与其使用的页面类似的事件。这是非常糟糕的设计。 UserControl不必知道有关页面的任何信息。您可以使用成员变量来更改UserControl的行为。但在我看来,UserControl不是您的任务的解决方案。