2017-01-02 116 views
1

我正在使用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的[ “消息”] == “假”,所以看我会在我的html中得到任何消息。但该消息不会呈现在我的html中

+0

'''如果(计算机[ “消息”])'''它也是一个布尔值,不串 –

回答

2

您可以使用此代码:

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

在控制器中,您正在设置ViewData,然后在视图中检查TempData。更新这个来匹配和你的代码应该工作。

2

你的代码有两个问题。

首先是在控制器中使用ViewData,在视图中使用TempData - 它们是不同的容器。始终如一地使用其中之一。

您还需要知道ViewData只在请求期间存在,因此当您执行重定向时,它将消失 - 看起来更合适的是TempData

二是,你总是设置ViewData["message"]falseIndex行动和您注册后你做的重定向到Index所以即使你会检查您的视图的同一容器它会产生错误和消息将不显示。只有在视图中渲染之后,才需要将该值设置为false。