<button type="submit" class="btn btn-primary btn-lg">Register</button>
submit提交按钮会提交的是整个表单,数据目的地取决于
@using (Html.BeginForm("Register", "Register", FormMethod.Post))
tempdata的使用
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Login(UserDto loginDto)
{
var login = _context.userInfos?.FirstOrDefault(l => l.Username == loginDto.Username && l.Password == loginDto.Password);
if (login != null)
{
TempData["Username"] = login.Username;
TempData["IsLoggedIn"] = true;
return RedirectToAction("Main", "Main");
}
else
{
return Unauthorized("Login Failed!");
}
}
在登录方法中为tempdata添加username和isloggedin的值
@if (TempData["isLoggedin"] != null && (bool)TempData["isLoggedin"])
{
<p>Welcome, @TempData["username"]!</p>
<p>You are logged in.</p>
}
在主界面view中通过@键值显示tempdata中的值
TempData是一个键/值对的集合,用于在Controller之间传递数据。与ViewBag不同的是,TempData中的值只能被读取一次,读取后就会从集合中删除。
超链接的使用
<a href="@Url.Action("Index", "Register")" class="btn btn-secondary">Register</a>
@url.action也是第一个是action的名字,第二个是controller的名字
viewbag message的使用
public IActionResult ForgotPassword(UserDto userDto)
{
if (ModelState.IsValid)
{
var user = _context.userInfos.FirstOrDefault(u => u.Username == userDto.Username && u.Email == userDto.Email);
if (user != null)
{
user.Password = userDto.Password;
_context.SaveChanges();
ViewBag.Message = "Password reset successfully.";
}
else
{
ModelState.AddModelError(string.Empty, "Username or email is incorrect.");
}
}
return View("~/Views/Login.cshtml", userDto);
}
在忘记密码中设置viewbag message的值
@if (ViewBag.Message != null)
{
<div class="alert alert-success">@ViewBag.Message</div>
}
在login中通过@展示值
ViewBag.Message 的值可以有一个。它是一个动态属性,可以在控制器中设置,并在视图中访问。它通常用于在视图中显示一些短暂的消息,例如成功或失败的操作提示。当值被设置后,它将一直保持有效,直到被更新或页面被重新加载为止。如果您在控制器中多次设置 ViewBag.Message 的值,则它将以最后设置的值为准。
context中的
public DbSet<UserInfo>? userInfos { get; set; }
DbSet 是 Entity Framework Core 中的一个类,用于表示一组实体对象的集合。通过定义 DbSet 属性,可以让 Entity Framework Core 自动映射 UserInfo 类型到数据库中的表,并生成相应的 SQL 查询语句和数据操作语句,从而方便地进行数据库操作。可以让其他类(conrtroller)通过dbset userinfos修改数据库