【问题标题】:How to refactor the code so one method for the two web forms如何将代码重构为两种 Web 表单的一种方法
【发布时间】:2016-02-16 11:21:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net design-patterns webforms refactoring


    【解决方案1】:

    您可以编写一个继承自 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()。 然后你在一个地方定义了你的代码。

    【讨论】:

      【解决方案2】:

      昨天编辑了@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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-25
        • 2010-10-16
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多