【问题标题】:Implementing methods on multiple ASPX pages for the same usercontrol在多个 ASPX 页面上为同一个用户控件实现方法
【发布时间】:2016-12-24 02:17:27
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net optimization


    【解决方案1】:

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

    【讨论】:

    • 确实,任务是“相同的” -- -- 首先允许用户浏览多个页面 (11) 以更新一个实体的详细信息,唯一的区别是(我在设计中引入) 是禁用导航到“当前”页面。 -- 允许用户保存、重置、取消、提交(到后端)他们的更改(显然,当页面更改时,正在保存的值更改)有什么想法吗?
    • 是的,你是对的......用户控件没有关于 ASPX 页面上的内容的信息。用户控件上的代码仅限于这几行! protected void Page_Load(object sender, EventArgs e) { sessionID = TMSession.tmCurrentSession.tmSessionPageID; } // 其中 11 个... 每页一个 protected void btnPage01_Click(object sender, EventArgs e) { if (btnPage01Click != null) btnPage01Click(sender, e); }
    • 您能否提供更多关于您的页面和用户控件的功能的信息?我还不明白你的概念。
    • 谢谢,有点 --- 我并不是说您直接帮助了我,但是您坚持认为我做错了什么促使我进一步寻找解决方案。我必须创建自定义用户控件类来解决我的情况。做同样事情的所有事件(导航到不同的页面)保持在一起,做一些不同的事情的事件必须直接在 ASPX 页面上编码。
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多