0

所以,这就是我的情况。我有多个 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) { }
4

1 回答 1

1

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

于 2013-09-14T16:08:40.147 回答