2017-01-02 3 views
1

Ich benutze ASP.net Core-Rasierer-Engine. Ich mache eine Registrierung und möchte dem Benutzer eine Erfolgsmeldung anzeigen, wenn die Registrierung erfolgreich war.
Hier ist mein CodeAnzeige der Erfolgsmeldung an Benutzer

meine CS-

Datei
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"); 
     } 
    } 
} 

meine HTML-Datei

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

ich auch TempData geändert [ "message"] == "false" so sehen, ob ich würde irgendeine Nachricht in meinem HTML bekommen. Aber die Nachricht rendert nicht in meinem html

+0

'' 'if (Viewdata [ "message"])' '' es ist auch ein boolean, nicht Zeichenfolge –

Antwort

2

Sie können Dienstprogramm diesen Code:

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(); 
     } 
    } 
} 

Code Rasiermesser

@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

In der Steuerung setzen Sie ViewData, dann überprüfen TempData in der Ansicht. Aktualisieren Sie dies, damit Ihr Code funktioniert.

2

Sie haben zwei Probleme mit Ihrem Code.

Zuerst ist, dass in den Controllern Sie ViewData verwenden und in der Ansicht verwenden Sie TempData - sie sind verschiedene Container. Verwenden Sie eines von ihnen konsequent.

Sie müssen auch beachten, dass ViewData nur während der Anfrage lebt, also wenn Sie die Umleitung tun wird es weggehen - es sieht so aus, als wäre die geeignetere TempData hier.

Zweite ist, dass Sie immer die ViewData["message"]-false in Ihrer Index Aktion gesetzt und nachdem Sie registrieren Sie tun, um die Umleitung zu Index so, auch wenn Sie den gleichen Behälter in Ihrer Ansicht überprüfen würde, es würde zu falsch und die Meldung nicht zeigen . Sie müssen den Wert erst auf "false" setzen, nachdem Sie ihn in Ihrer Ansicht gerendert haben.

Verwandte Themen