【问题标题】:List being cleared When go back to index page列表被清除 返回索引页面时
【发布时间】:2020-06-05 00:01:37
【问题描述】:

我有一个数据库模型,用于类中的列表,但是我从控制器中将其称为单例,但是当模型再次被检索为空时。我认为它是因为我要再次访问页面位置。

public class ElectricianController : Controller {
    private IDatabaseService ds;
    public IActionResult Index(ElectricianModel model) {           
        return View(ds.GetAllCircuits());
    }

GetAllCircuits 上方的这一点是再次清除列表的地方?

[HttpPost]
public void SaveCircuit(CircuitModel model) {             
if (ModelState.IsValid) {
  //it wants to be a new record their for add to it 
   if (model.Id > 0) {
      ViewBag.Title = "Update";
      ds.UpdateCircuit(model);
    } else {
      ViewBag.Title = "Create";
      ds.AddToCircuits(model);
   }
        var query = ds.GetAllCircuits();
    }
 }

这是我的服务。

 public class ElectricalSurveyDL : IDatabaseService {
    public  ApplicationDBContext db;
    public List<CircuitModel> CircuitsList;
    public ElectricalSurveyDL(ApplicationDBContext dbcontext) {
        db = dbcontext;
        if(CircuitsList == null)
        CircuitsList =  new List<CircuitModel>();
 } 

 public void AddToCircuits(CircuitModel model) {
     CircuitsList.Add(model);            
 }
 public List<CircuitModel> GetAllCircuits() {
     return CircuitsList.ToList();
 }

它很好地添加了电路,但是当它返回到页面时,它又破坏了它。 我在 startup.cs 中按如下方式添加我的层

  services.AddScoped<IDatabaseService, ElectricalSurveyDL>();

我完成列表的方式不应该意味着它贯穿整个应用程序而不仅仅是页面吗?

> 编辑 2

我更改为以下内容,但现在出现此错误。 services.AddSingleton();

某些服务无法构建(验证时出错 服务描述符'ServiceType: ElectricalSurvey.DAL.IDatabaseService 生命周期:单例 实施类型:ElectricalSurvey.DAL.ElectricalSurveyDL':不能 使用范围服务“ElectricalSurvey.DAL.ApplicationDBContext” 来自单身 'ElectricalSurvey.DAL.IDatabaseService'.)'

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    问题是:

    services.AddScoped<IDatabaseService, ElectricalSurveyDL>();
    

    每个新请求都会创建 ElectricalSurveyDL 的新实例,因此在 ElectricalSurveyDL 的构造函数中将 List CircuitsList 初始化为新 List,因为表达式:

     if (CircuitsList == null)
                        CircuitsList = new List<CircuitModel>()
    

    在当前注册中始终为真

    如果你想保持单例使用:

     services.AddSingleton<IDatabaseService, ElectricalSurveyDL>()
    

    【讨论】:

    • 如果我将其更改为 Singleton,请参阅编辑 2 启动时出错。
    猜你喜欢
    • 2011-02-10
    • 2014-05-01
    • 1970-01-01
    • 2012-07-12
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2012-02-25
    相关资源
    最近更新 更多