如何使用 DbContext 类中存在的 DbSet<> 属性作为控制器类中存在的操作方法的参数?



我正在制作一个登录和注册web应用程序。在[HttpPost]登录方法(存在于UserController类中(中,我想将"DbSet Users"属性作为参数传递,但我遇到了一个错误。这是包含DbSet属性的DbContext类的屏幕截图。这是Controller类中存在的操作方法的屏幕截图

public class UsersController : Controller
{
private  readonly DataContext db;
public UsersController(DataContext db)
{
this.db = db;
}
public IActionResult Index()
{
return View(db.Users.ToList());
}
public IActionResult Register()
{
return View();
}
[HttpPost]
public IActionResult Register(User usr)
{
if (ModelState.IsValid)
{
db.Users.Add(usr);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
ModelState.AddModelError("", "Some Error Occured!");
}
return View(usr);
}
public IActionResult Login()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Login(Users users )
{
if (ModelState.IsValid)
{
var obj = db.users.Where(u => u.Username == (users.Username) && u.Password == (users.Password)).FirstOrDefault();
if (obj != null)
{
TempData["UserId"] = obj.UserId.ToString();
TempData["Username"] = obj.Username.ToString();
return RedirectToAction("LoggedIn");
}
}
return View(users);
}
public IActionResult LoggedIn()
{
if (TempData["UserId"] != null)
{
return View();
}
else
{
return RedirectToAction("Login");
}
}
}

使用代码标记(打印屏幕非常烦人(,因为它们更容易阅读,例如可以从中复制粘贴。您必须在控制器中获取一个DataContext实例。ASP.NET中没有依赖项注入吗?如果是这样,只需将DataContext作为服务注入即可。粘贴时,您的代码无法工作-作用域中不存在类Users(您使用Users作为类名(。

我找到了它的解决方案。我们可以简单地创建一个ViewModel类,该类将包含用户名和密码属性(这在登录时是必需的(,并且我们可以使用该ViewModel类作为login Action方法中的参数。

最新更新