向用户显示成功消息

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>
  }