asp.net 如何从母版页为TabContainer中的不同选项卡运行不同的逻辑

8fsztsew  于 2023-08-08  发布在  .NET
关注(0)|答案(1)|浏览(138)

在我的应用程序中,我们有母版页,它有一些共同的特点,如出口到Excel,PDF等。
在内容页面上,我有多个标签的TabContainer。
当我运行像导出到Excel这样的选项时,母版页在内容页上调用exportExcel函数。基于活动选项卡,我运行不同的逻辑来导出数据。每个选项卡上的字段不同,因此需要单独的逻辑。

var activeTab = TabContainer.ActiveTab;
if (activeTab == abc_Tab)
{
//some logic
}
else if (activeTab == def_Tab)
{
//some logic
}
else if (activeTab == ghi_Tab)
{
//some logic
}
else if (activeTab == jkl_Tab)
{
//some logic
}

字符串
这段代码运行得非常好。问题是,这种if-else逻辑对于每个母版页功能都是重复的。如果我添加了新的功能,比如导出到csv,ExportCsv函数也会有这个if-else条件。这不仅限于导出功能。有时,我需要传递一些数据/参数,并且基于活动的数据/参数,这些数据/参数的解释不同。
有没有更好的方法来处理这件事?

twh00eeo

twh00eeo1#

我建议使用策略模式来 Package /隐藏所有这些东西。https://www.dofactory.com/net/strategy-design-pattern
你可以使用一个字典与导出逻辑实现和使用标签名称作为关键检索的实现逻辑。

Dictionary<string, ExportLogicService> tabExportLogicDictionary= new Dictionary<string, ExportLogicService>();
// constructor
public YourUI()
{
  // Initialize your dictionary
  tabExportLogicDictionary.Add("abc_Tab", new abcTabExportLogic());
  ...
}

字符串
其中:

public abstract class ExportLogicService
{
    public abstract void ExportData();
}

public class abcTabExportLogic: ExportLogicService
{
    public override void ExportData()
    {
        // do something...
    }
}

public class ExportService
{
    ExportLogicService exportService;
    // Constructor
    public ExportService(ExportLogicService exportService)
    {
        this.exportService= exportService;
    }
    public void ExportMyData()
    {
        exportService.ExportData();
    }
}


当需要导出数据时,请执行以下操作:

var tabName = TabContainer.TabPages[TabContainer.SelectedIndex].Name.ToString(); //get your tab name
var exportLogic = tabExportLogicDictionary[tabName]; //you can add verification before if needed
exportService = new ExportService(exportLogic);
exportService.ExportMyData();

相关问题