如何重构代码,使两种网络表单的一种方法

How to refactor the code so one method for the two web forms

如果我有两个像这样的网络表单:

public partial class frm_createVac : System.Web.UI.Page

public partial class frm_editVac : System.Web.UI.Page

并且两个页面都有以下相同的方法:


 private void FillVacations()
        {
            DataTable dt = DAL.Vacation.GetVacationTypes();
            ddl_vac_type.Items.Clear();
            ddl_vac_type.DataSource = dt;
            ddl_vac_type.DataTextField = "vac_name";
            ddl_vac_type.DataValueField = "vac_code";
            ddl_vac_type.DataBind();

            ListItem item = new ListItem("-SELECT-", "-1");
            ddl_vac_type.Items.Insert(0, item);
        }

如何重构我的代码以便两个页面都使用一种方法?

您可以编写一个继承自 System.Web.UI.Page 的超级 class,然后让您的 class 继承自该超级 class。然后你在你的 super class 中定义方法并在你的 child class:

中使用它
public partial class Vacationpage: System.Web.UI.Page
{
        //define atttributes
        public Vacationpage()
        {
        }

        private void FillVacations()
        { 
        DataTable dt = DAL.Vacation.GetVacationTypes();
        ddl_vac_type.Items.Clear();
        ddl_vac_type.DataSource = dt;
        ddl_vac_type.DataTextField = "vac_name";
        ddl_vac_type.DataValueField = "vac_code";
        ddl_vac_type.DataBind();

        ListItem item = new ListItem("-SELECT-", "-1");
        ddl_vac_type.Items.Insert(0, item);
        }        
}

然后你这样做:

public partial class frm_createVac : Vacationpage

public partial class frm_editVac : Vacationpage

在这些 class 中,您可以使用 FillVacations()。 然后你在一个地方定义了你的代码。

昨天编辑@StarterPack 在回答中输入错误,我再次查看了您的问题并意识到在您的情况下更好的选择是辅助方法,而不是依赖于标记或控件 ID。假设您使用的是 DropDownList,它将是

public class VacationHelper
{
    public static void FillVacations(System.Web.UI.WebControls.DropDownList ddl)
    {
        DataTable dt = DAL.Vacation.GetVacationTypes();
        ddl.Items.Clear();
        ddl.DataSource = dt;
        ddl.DataTextField = "vac_name";
        ddl.DataValueField = "vac_code";
        ddl.DataBind();

        ListItem item = new ListItem("-SELECT-", "-1");
        ddl.Items.Insert(0, item);
    }
}

并在每个页面上调用它

VacationHelper.FillVacations(ddl_vac_type);