首页 > 解决方案 > 更新基本控制器变量值,但在 ASP.NET Core 中未更新所有派生控制器

问题描述

这是我的BaseController

public abstract class BaseController : Controller
{
    public Int64 CompanyId { get; set; } // I need to update this property
}

我还有另外 2 个控制器CompanyController

public class CompanyController : BaseController
{
   
    public IActionResult ChangeCompany(long CompanyId = 35)  //
    {   
        base.CompanyId = CompanyId;
        // other code
    }

    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 35
    }
}

AccountController

public class AccountController : BaseController
{
    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 0
    }
}

如何从中获取更新的CompanyIdAccountController

标签: c#asp.net-core-mvc

解决方案


你不能。每个对象都是不同的,基类只是其他类扩展的模板。每个new对象都将创建和维护自己的CompanyId变量,因此您不能也不应该通过更改另一个来更改一个。

static如果您只想为所有类提供一个值,请检查关键字public static Int64 CompanyId { get; set; }

基本上是这样的:

public class CompanyController : BaseController
{
   
    public IActionResult ChangeCompany(long CompanyId = 35)  //
    {   
        base.CompanyId = CompanyId;
        // other code
    }

    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 35
    }

}

和这个是一样的(虽然没有继承,你甚至不知道这两个类有哪些共同点):

public class CompanyController
{
    public Int64 CompanyId { get; set; } // I need to update this property
    public IActionResult ChangeCompany(long CompanyId = 35)  //
    {   
        base.CompanyId = CompanyId;
        // other code
    }

    public IActionResult GetCompany()  //
    {   
        return base.CompanyId  // return 35
    }

}

推荐阅读