2017-01-02 20 views
1

私はASP.netコア・レザー・エンジンを使用しています。私は登録をしており、登録が成功したときに成功メッセージをユーザに表示したい。ここ
は私のコードは私の.csファイルは、私はまた、TempDataを[ "メッセージ"] == "偽" に変更ので、私かどうかを確認ユーザに成功メッセージを表示

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

ファイル

です私のHTMLにはどんなメッセージがもらえます。しかし、メッセージは自分のhtmlにレンダリングされません

+0

'IF(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

コードに2つの問題があります。

まずコントローラではViewDataを使用し、表示ではTempDataを使用します。これらは異なるコンテナです。それらの1つを一貫して使用してください。

また、リクエスト中にViewDataが存続することに注意する必要があります。リダイレクトを行うと、それはなくなります。より適切なのはTempDataです。

第二には、常にあなたのIndexアクションでfalseからViewData["message"]を設定し、あなたが登録した後、あなたがIndexへのリダイレクトを行う、あなたのビューで同じコンテナをチェックしますので、場合でも、それは偽もたらすであろうと、メッセージが表示されないだろうということです。ビューにレンダリングした後にのみ値をfalseに設定する必要があります。

関連する問題