如何解决当用户输入其StaffNRIC时如何将职员ID存储到tempdata中
我将首先简要介绍一下我当前的代码。 我的代码是一个登录功能,可以比较并检查用户输入的内容,并查看数据库中是否正确,如果正确,则用户可以登录,并根据其角色显示不同的视图页面。目前,我正在使用临时数据存储他们键入的内容作为StaffNRIC,并在他们登录时显示它们,并可能将临时数据用于其他功能。但是,如果临时数据只能存储用户键入的内容,但我想要其NRIC是什么的Staff ID,我如何获得Staff ID。注释行是我试图徒劳的 当我尝试注释行时,它显示此错误 InvalidOperationException:'Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure.DefaultTempDataSerializer'无法序列化'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable'1 [Starbucks.Models.StaffModel]'类型的对象。
这是我的下面的代码
'`
[HttpPost]
public ActionResult Verify(Account acc)
{
connectionString();
con.Open();
com.Connection = con;
com.CommandText = "select * from Staff where StaffNRIC='" + acc.StaffNRIC + "' and StaffPassword='" + acc.StaffPassword + "' and StaffAccountStatus = 'Approved'";
dr = com.ExecuteReader();
if (dr.HasRows)
{
TempData["StaffNRIC"] = acc.StaffNRIC;
//var staff = _context.Staff.Where(p => p.StaffNRIC == acc.StaffNRIC);
//var staff = _context.Staff.Any(p => p.StaffNRIC == acc.StaffNRIC);
//if(staff.Any(p => p.StaffNRIC == acc.StaffNRIC)
//TempData["test"] = staff;
while (dr.Read())
{
if (dr["StaffRole"].ToString() == "Manager")
{
con.Close();
return RedirectToAction("ManagerHome","Manager");//wherever you want to return the user to
}
else if (dr["StaffRole"].ToString() == "Admin")
{
con.Close();
return RedirectToAction("AdminHome","Admin");
}
else if (dr["StaffRole"].ToString() == "Part-Timer")
{
con.Close();
return RedirectToAction("PartTimerHome","PartTimer");
}
else
{
con.Close();
return View( "Login");
}
}
}
ViewBag.Message = "Wrong NRIC and Password or Account not approved";
return View("Login");
}`'
下面是我的HTML代码,用于他们登录后将显示的内容
'` @ {
Layout = "~/Views/Shared/AdminLayout.cshtml";
}
@ViewData [“标题”]
<div class="cover-container d-flex h-100 p-3 mx-auto flex-column">
<main role="main" class="inner cover">
<h1 class="cover-heading">Welcome back Admin</h1>
@{
var tempDataEmployeet = TempData["StaffNRIC"] as StaffModel; //need typcasting
TempData.Keep(); // retains all strings values
}
<h2>@TempData["test"]</h2>
</main>
</div>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery-slim.min.js"><\/script>')</script>
<script src="../../assets/js/vendor/popper.min.js"></script>
<script src="../../dist/js/bootstrap.min.js"></script>
登出
`'
解决方法
您是要执行以下操作吗?
var staff = _context.Staff.FirstOrDefault(p => p.StaffNRIC == acc.StaffNRIC);
您之前使用过Where
,它不会对数据库执行查询,而只是向尚未执行的查询添加条件。
当您要将查询结果存储在某处时,需要确保查询已执行。这些是将执行查询的一些功能:
-
ToArray
/ToList
:返回0个或更多查询结果的列表 -
FirstOrDefault
:返回一个结果或为空 -
First
:返回一个结果或引发异常 -
Any
:返回一个布尔值,指示结果是否存在,但不会返回结果本身。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。