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 に答える