如何重构代码,使两种网络表单的一种方法
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);
如果我有两个像这样的网络表单:
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);