如何重构代码,以便为两个 Web 表单使用一种方法

本文关键字:表单 Web 两个 一种 方法 重构 何重构 代码 | 更新日期: 2023-09-27 18:34:44

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

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);
        }

如何重构我的代码,以便我对两个页面都有一个方法?

如何重构代码,以便为两个 Web 表单使用一种方法

你可以编写一个从 System.Web.UI.Page 继承的超类,然后让你的类从该超类继承。然后,在超类中定义方法并在子类中使用它:

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

在这些类中,您可以使用 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);