You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多个控制器中复用自定义的SelectListItem下拉选项列表

复用方案

你可以根据项目的架构习惯选以下任意一种实现,都能做到仅修改一处代码全局生效,且无额外数据库开销:

方案1:封装公共静态工具类(最适配你的需求,实现最简单、性能最优)

因为你的列表改动概率极低,用静态类+静态字段缓存的方式,不会每次调用都重复初始化列表,性能消耗可以忽略:

public static class CommonSelectProvider
{
    // 静态字段全局仅初始化一次,常驻内存
    private static readonly List<SelectListItem> _bankRegionSelectList = new List<SelectListItem>()
    {
        new SelectListItem { Text = "" , Value = "", Selected = true},
        new SelectListItem { Text = "North" , Value = "North"},
        new SelectListItem { Text = "East" , Value = "East"},
        new SelectListItem { Text = "North East" , Value = "North East"},
        new SelectListItem { Text = "West" , Value = "West"},
    };

    public static List<SelectListItem> GetBankRegionSelectList()
    {
        // 如果担心外部修改原始列表,可以返回副本,无需副本直接返回变量即可
        // return new List<SelectListItem>(_bankRegionSelectList);
        return _bankRegionSelectList;
    }
}

任意位置需要使用时,直接调用 CommonSelectProvider.GetBankRegionSelectList() 即可。

方案2:基控制器封装(适合多控制器需要复用大量公共逻辑的场景)

定义所有控制器的父类基控制器,把方法封装在基类中,子类控制器可直接调用:

public class BaseController : Controller
{
    protected List<SelectListItem> BankSelectList()
    {
        return CommonSelectProvider.GetBankRegionSelectList();
    }
}

所有继承BaseController的业务控制器都可以直接在内部调用BankSelectList()方法。

方案3:单例服务注册(符合依赖注入规范的项目首选)

如果你的项目遵循依赖注入开发规范,可以将提供列表的服务注册为全局单例:

  1. 定义服务接口与实现
public interface ICommonSelectService
{
    List<SelectListItem> GetBankRegionList();
}

public class CommonSelectService : ICommonSelectService
{
    private readonly List<SelectListItem> _bankRegionList = new()
    {
        // 列表内容同上
    };

    public List<SelectListItem> GetBankRegionList() => _bankRegionList;
}
  1. 在Program.cs(.NET Core)中注册单例:
builder.Services.AddSingleton<ICommonSelectService, CommonSelectService>();
  1. 控制器中通过构造函数注入服务后即可调用方法,性能和静态方案一致。

额外提示:你贴出的原始代码存在语法错误,方法内定义的列表变量名为Region,但返回值是bank,运行会报错,记得修正。

内容的提问来源于stack exchange,提问作者Waller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:45:04