向用户显示成功消息
Display success message to user
我正在使用 ASP.net 核心剃须刀引擎。我正在注册,我想在注册成功后向用户显示一条成功消息。
这是我的代码
我的 .cs 文件
namespace login.Controllers
{
public class HomeController : Controller
{
private readonly UserFactory userFactory;
public HomeController(UserFactory user) {
userFactory = user;
}
// GET: /Home/
[HttpGet]
[Route("")]
public IActionResult Index()
{
ViewData["message"] = false;
return View();
}
[HttpPost]
[Route("")]
public IActionResult Register(Home model)
{
if(!ModelState.IsValid)
{
return View("Index", model);
}
PasswordHasher<Home> Hasher = new PasswordHasher<Home>();
model.Password = Hasher.HashPassword(model, model.Password);
userFactory.Add(model);
ViewData["message"] = true;
return RedirectToAction("Index");
}
}
}
我的html文件
@model login.Models.Home
@using(Html.BeginForm("Register","Home"))
{
<h1>Please Register</h1>
<p>
<label>Your First Name</label>
@Html.TextBoxFor(s=>s.FirstName)
@Html.ValidationMessageFor(s => s.FirstName)
</p>
<p>
<label>Your Last Name</label>
@Html.TextBoxFor(s=>s.LastName)
@Html.ValidationMessageFor(s => s.LastName)
</p>
<p>
<label>Your Email</label>
@Html.TextBoxFor(s=>s.Email)
@Html.ValidationMessageFor(s => s.Email)
</p>
<p>
<label>Your Password</label>
@Html.TextBoxFor(s=>s.Password)
@Html.ValidationMessageFor(s => s.Password)
</p>
<p>
<label>Confrim Password</label>
@Html.TextBoxFor(s=>s.PasswordConfirmation)
@Html.ValidationMessageFor(s => s.PasswordConfirmation)
</p>
<input type="submit" name="submit" value="Register!"/>
}
@if(ViewData["message"] == "true")
{
<p>Success</p>
}
我也更改为 TempData["message"] == "false" 所以看看我是否会在我的 html 中收到任何消息。但是消息不会在我的 html
中呈现
在控制器中,您正在设置 ViewData
,然后在视图中检查 TempData
。更新它以匹配,您的代码应该可以工作。
您的代码有两个问题。
首先是在控制器中使用 ViewData
和在视图中使用 TempData
- 它们是不同的容器。始终使用其中之一。
您还需要注意 ViewData
仅在请求期间存在,因此当您进行重定向时它会消失 - 看起来 TempData
更合适。
其次,您总是在 Index
操作中将 ViewData["message"]
设置为 false
,并且在您注册后重定向到 Index
,因此即使您愿意在您的视图中检查同一个容器,它会产生 false 并且消息不会显示。只有在视图中呈现后才需要将值设置为 false。
您可以使用此代码:
代码 cs.
namespace login.Controllers
{
public class HomeController : Controller
{
private readonly UserFactory userFactory;
public HomeController(UserFactory user) {
userFactory = user;
}
// GET: /Home/
[HttpGet]
[Route("")]
public IActionResult Index()
{
return View();
}
[HttpPost]
[Route("")]
public IActionResult Register(Home model)
{
if(!ModelState.IsValid)
{
return View("Index", model);
}
PasswordHasher<Home> Hasher = new PasswordHasher<Home>();
model.Password = Hasher.HashPassword(model, model.Password);
userFactory.Add(model);
ViewBag.message = "Success";
return View();
}
}
}
代码剃须刀
@model login.Models.Home
@using(Html.BeginForm("Register","Home"))
{
<h1>Please Register</h1>
<p>
<label>Your First Name</label>
@Html.TextBoxFor(s=>s.FirstName)
@Html.ValidationMessageFor(s => s.FirstName)
</p>
<p>
<label>Your Last Name</label>
@Html.TextBoxFor(s=>s.LastName)
@Html.ValidationMessageFor(s => s.LastName)
</p>
<p>
<label>Your Email</label>
@Html.TextBoxFor(s=>s.Email)
@Html.ValidationMessageFor(s => s.Email)
</p>
<p>
<label>Your Password</label>
@Html.TextBoxFor(s=>s.Password)
@Html.ValidationMessageFor(s => s.Password)
</p>
<p>
<label>Confrim Password</label>
@Html.TextBoxFor(s=>s.PasswordConfirmation)
@Html.ValidationMessageFor(s => s.PasswordConfirmation)
</p>
<input type="submit" name="submit" value="Register!"/>
}
@if(!string.IsNullOrEmpty(ViewBag.message))
{
<p>@ViewBag.message</p>
}
我正在使用 ASP.net 核心剃须刀引擎。我正在注册,我想在注册成功后向用户显示一条成功消息。
这是我的代码
我的 .cs 文件
namespace login.Controllers
{
public class HomeController : Controller
{
private readonly UserFactory userFactory;
public HomeController(UserFactory user) {
userFactory = user;
}
// GET: /Home/
[HttpGet]
[Route("")]
public IActionResult Index()
{
ViewData["message"] = false;
return View();
}
[HttpPost]
[Route("")]
public IActionResult Register(Home model)
{
if(!ModelState.IsValid)
{
return View("Index", model);
}
PasswordHasher<Home> Hasher = new PasswordHasher<Home>();
model.Password = Hasher.HashPassword(model, model.Password);
userFactory.Add(model);
ViewData["message"] = true;
return RedirectToAction("Index");
}
}
}
我的html文件
@model login.Models.Home
@using(Html.BeginForm("Register","Home"))
{
<h1>Please Register</h1>
<p>
<label>Your First Name</label>
@Html.TextBoxFor(s=>s.FirstName)
@Html.ValidationMessageFor(s => s.FirstName)
</p>
<p>
<label>Your Last Name</label>
@Html.TextBoxFor(s=>s.LastName)
@Html.ValidationMessageFor(s => s.LastName)
</p>
<p>
<label>Your Email</label>
@Html.TextBoxFor(s=>s.Email)
@Html.ValidationMessageFor(s => s.Email)
</p>
<p>
<label>Your Password</label>
@Html.TextBoxFor(s=>s.Password)
@Html.ValidationMessageFor(s => s.Password)
</p>
<p>
<label>Confrim Password</label>
@Html.TextBoxFor(s=>s.PasswordConfirmation)
@Html.ValidationMessageFor(s => s.PasswordConfirmation)
</p>
<input type="submit" name="submit" value="Register!"/>
}
@if(ViewData["message"] == "true")
{
<p>Success</p>
}
我也更改为 TempData["message"] == "false" 所以看看我是否会在我的 html 中收到任何消息。但是消息不会在我的 html
中呈现在控制器中,您正在设置 ViewData
,然后在视图中检查 TempData
。更新它以匹配,您的代码应该可以工作。
您的代码有两个问题。
首先是在控制器中使用 ViewData
和在视图中使用 TempData
- 它们是不同的容器。始终使用其中之一。
您还需要注意 ViewData
仅在请求期间存在,因此当您进行重定向时它会消失 - 看起来 TempData
更合适。
其次,您总是在 Index
操作中将 ViewData["message"]
设置为 false
,并且在您注册后重定向到 Index
,因此即使您愿意在您的视图中检查同一个容器,它会产生 false 并且消息不会显示。只有在视图中呈现后才需要将值设置为 false。
您可以使用此代码:
代码 cs.
namespace login.Controllers
{
public class HomeController : Controller
{
private readonly UserFactory userFactory;
public HomeController(UserFactory user) {
userFactory = user;
}
// GET: /Home/
[HttpGet]
[Route("")]
public IActionResult Index()
{
return View();
}
[HttpPost]
[Route("")]
public IActionResult Register(Home model)
{
if(!ModelState.IsValid)
{
return View("Index", model);
}
PasswordHasher<Home> Hasher = new PasswordHasher<Home>();
model.Password = Hasher.HashPassword(model, model.Password);
userFactory.Add(model);
ViewBag.message = "Success";
return View();
}
}
}
代码剃须刀
@model login.Models.Home
@using(Html.BeginForm("Register","Home"))
{
<h1>Please Register</h1>
<p>
<label>Your First Name</label>
@Html.TextBoxFor(s=>s.FirstName)
@Html.ValidationMessageFor(s => s.FirstName)
</p>
<p>
<label>Your Last Name</label>
@Html.TextBoxFor(s=>s.LastName)
@Html.ValidationMessageFor(s => s.LastName)
</p>
<p>
<label>Your Email</label>
@Html.TextBoxFor(s=>s.Email)
@Html.ValidationMessageFor(s => s.Email)
</p>
<p>
<label>Your Password</label>
@Html.TextBoxFor(s=>s.Password)
@Html.ValidationMessageFor(s => s.Password)
</p>
<p>
<label>Confrim Password</label>
@Html.TextBoxFor(s=>s.PasswordConfirmation)
@Html.ValidationMessageFor(s => s.PasswordConfirmation)
</p>
<input type="submit" name="submit" value="Register!"/>
}
@if(!string.IsNullOrEmpty(ViewBag.message))
{
<p>@ViewBag.message</p>
}