2017-01-02 5 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

'' ', если (ViewData [ "сообщение"])' '' это также логическое значение, а не строка –

ответ

2

Вы можете использовать этот код:

код 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"] к false в вашем Index действия и после регистрации вы делаете редирект Index так, даже если бы вы проверить тот же контейнер на ваш взгляд, это даст ложное и сообщение не будет показывать , Вы должны установить значение в false только после того, как вы сделаете его в своем представлении.