2017-01-02 135 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。