我是否必须在每个剃须刀页面模型中调用数据库?
Do I have to call the database in every single razor page model?
上下文
我正在使用 ASP.NET 核心 2.1 和剃刀页面。到目前为止我没有使用 MVC,但如果需要我愿意添加它。
我有结构"Pages/MyPages/Login.cshtml"。
“.../Login.cshtml”页面有一个名为“.../Login.cshtml.cs”的模型
现在,我在“.../Login.cshtml.cs”中有这段代码:
public class LoginModel : PageModel
{
// Set up private variables for database access and user/login managers
private readonly AppDbContext _db;
private readonly UserManager<AppUser> _userManager;
private readonly SignInManager<AppUser> _signInManager;
// Import database access and user/login managers
public LoginModel(
AppDbContext db,
UserManager<AppUser> userManager,
SignInManager<AppUser> signInManager)
{
_db = db;
_userManager = userManager;
_signInManager = signInManager;
}
...
}
问题
我有另一个名为 "Pages/MyPages/CreateUser.cshtml" 的剃须刀页面,它有自己的模型称为“.../CreateUser.cshtml.cs”,即:
public class CreateUserModel : PageModel
{
// Set up private variables for database access and user/login managers
private readonly AppDbContext _db;
private readonly UserManager<AppUser> _userManager;
private readonly SignInManager<AppUser> _signInManager;
// Import database access and user/login managers
public CreateUserModel(
AppDbContext db,
UserManager<AppUser> userManager,
SignInManager<AppUser> signInManager)
{
_db = db;
_userManager = userManager;
_signInManager = signInManager;
}
...
}
和Login.cshtml.cs中的代码一模一样,我想知道有没有办法把这段代码一次写完,应用到我需要的每一个模型上。
没用
我尝试创建一个名为 MyPageModel.cs 的 class,它继承自页面模型并设置了一个包含数据库、用户和管理器内容的构造函数:
public class MyPageModel : PageModel
{
protected AppDbContext _db;
protected UserManager<AppUser> _userManager;
protected SignInManager<AppUser> _signInManager;
public MyPageModel(
AppDbContext db,
UserManager<AppUser> userManager,
SignInManager<AppUser> signInManager)
{
_db = db;
_userManager = userManager;
_signInManager = signInManager;
}
}
然后Login.cshtml.cs和CreateUser.cs从中继承:
public class LoginModel : MyPageModel
{
...
}
但它给出了这个错误:
" 没有给定的参数对应于 'MyPageModel.MyPageModel(AppDbContext, UserManager, SigInManager)' 的所需格式参数 'db' "
您的基本页面模型有一个带参数的构造函数,但继承 classes 没有使用该构造函数。他们需要为该构造函数提供值:
public class LoginModel : MyPageModel
{
public LoginModel(AppDbContext db, UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
: base(db, userManager, signInManager) { }
// the rest of the class implementation
}
他们不需要自己的构造函数实现,但至少需要接收所需的构造函数参数并将它们传递给基础 class 构造函数。
上下文
我正在使用 ASP.NET 核心 2.1 和剃刀页面。到目前为止我没有使用 MVC,但如果需要我愿意添加它。
我有结构"Pages/MyPages/Login.cshtml"。
“.../Login.cshtml”页面有一个名为“.../Login.cshtml.cs”的模型
现在,我在“.../Login.cshtml.cs”中有这段代码:
public class LoginModel : PageModel
{
// Set up private variables for database access and user/login managers
private readonly AppDbContext _db;
private readonly UserManager<AppUser> _userManager;
private readonly SignInManager<AppUser> _signInManager;
// Import database access and user/login managers
public LoginModel(
AppDbContext db,
UserManager<AppUser> userManager,
SignInManager<AppUser> signInManager)
{
_db = db;
_userManager = userManager;
_signInManager = signInManager;
}
...
}
问题
我有另一个名为 "Pages/MyPages/CreateUser.cshtml" 的剃须刀页面,它有自己的模型称为“.../CreateUser.cshtml.cs”,即:
public class CreateUserModel : PageModel
{
// Set up private variables for database access and user/login managers
private readonly AppDbContext _db;
private readonly UserManager<AppUser> _userManager;
private readonly SignInManager<AppUser> _signInManager;
// Import database access and user/login managers
public CreateUserModel(
AppDbContext db,
UserManager<AppUser> userManager,
SignInManager<AppUser> signInManager)
{
_db = db;
_userManager = userManager;
_signInManager = signInManager;
}
...
}
和Login.cshtml.cs中的代码一模一样,我想知道有没有办法把这段代码一次写完,应用到我需要的每一个模型上。
没用
我尝试创建一个名为 MyPageModel.cs 的 class,它继承自页面模型并设置了一个包含数据库、用户和管理器内容的构造函数:
public class MyPageModel : PageModel
{
protected AppDbContext _db;
protected UserManager<AppUser> _userManager;
protected SignInManager<AppUser> _signInManager;
public MyPageModel(
AppDbContext db,
UserManager<AppUser> userManager,
SignInManager<AppUser> signInManager)
{
_db = db;
_userManager = userManager;
_signInManager = signInManager;
}
}
然后Login.cshtml.cs和CreateUser.cs从中继承:
public class LoginModel : MyPageModel
{
...
}
但它给出了这个错误:
" 没有给定的参数对应于 'MyPageModel.MyPageModel(AppDbContext, UserManager, SigInManager)' 的所需格式参数 'db' "
您的基本页面模型有一个带参数的构造函数,但继承 classes 没有使用该构造函数。他们需要为该构造函数提供值:
public class LoginModel : MyPageModel
{
public LoginModel(AppDbContext db, UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
: base(db, userManager, signInManager) { }
// the rest of the class implementation
}
他们不需要自己的构造函数实现,但至少需要接收所需的构造函数参数并将它们传递给基础 class 构造函数。