【发布时间】:2019-12-25 14:43:14
【问题描述】:
我只是想知道如何为索引页面上的某些条件 if 语句维护它。在我的索引页面上,我有一个条件 if 语句集,如果管理员用户为空,它将显示登录表单,一旦按下提交,此条件 if 语句不应再加载表单,而是应显示主页和导航栏。
@if (ViewBag.Users == null)
{
using (Html.BeginForm("ValidateUser", "Home", FormMethod.Post,
new { @class =
"form-signin" }))
{
///set text to be centered horizontolly
<div class="text-center">
<img class="mb-4" src="~/images/people.svg" alt="" width="72" height="72">
<h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
@Html.TextBoxFor(m => m.UserEmail, new { @type = "email", id = "inputEmail", Name = "Email Address", @class = "form-control", placeHolder = "Email Address", autocomplete = "off", required = "required" })
@Html.TextBoxFor(m => m.Password, new { @type = "password", id = "inputPassword", Name = "Password", @class = "form-control", placeHolder = "Password", autocomplete = "off", required = "required" })
<div class="checkbox mb-3">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</div>
}Html.EndForm();}
这是我对行动的看法
[HttpPost][ActionName("ValidateUser")]
public IActionResult ValidateUser(Users user)
{
///check if modelstate is active once it is, retrieve the users
and add the new identity if it matches
if(ModelState.IsValid)
{
///simulating a database call for users
List<Users> admin = user.GetUsers();
if(admin.FirstOrDefault().UserEmail == user.UserEmail &&
admin.FirstOrDefault().Password == user.Password)
{
ViewBag.Users = user;
return RedirectToAction("Index");
}
}
return View(user);
}
我目前期望的结果是,当 viewbag.users != null 时,表单根本不应该出现
总结:一旦我在表单上按下提交,它就会进入 ValidateUser 操作以验证该人是否是管理员。然后它将人员详细信息保存在 Viewbag.Users 中。因此 viewbag.Users 不再为空,因此 if 语句不应再工作,但仍显示登录表单
答案:viewbag 不存在于请求之间,因此使用 viewtemp 或 cookie 或查询
【问题讨论】:
-
一旦我在表单上按下提交,它就会进入 ValidateUser 操作以验证该人是否是管理员。然后它将人员详细信息保存在 Viewbag.Users 中。因此 viewbag.Users 不再为空,因此 if 语句不应该再工作了,但它仍然显示登录表单
-
您是否认为
ViewBag在 http 请求之间以某种方式持续存在?如果是这样,答案是否定的——它不会那样做。它仅适用于 单个 http 请求。RedirectToAction导致单独的 http 请求。 -
不,您的
ViewBag值在重定向期间丢失。您需要使用TempData在重定向之间保留您的值。 -
不是吗?那么你将如何持久化一个对象
-
TempData将是一种方式(尽管不是我建议的方式)。查询字符串可能是另一个。或者一个 cookie。
标签: c# html model-view-controller view