2017-04-06 12 views
-1

私はMVCに投稿するリセットパスワードメソッドを持っています。 [Submit]ボタンをクリックすると、URLが次のように表示されます:http://localhost:11580/resetpassword URLにアクションメソッドの名前が表示されます。そのため、ページのリンクがもう機能しないため、resetpasswordアクション名?MVCフォーム投稿後のURL内のアクション名を取り除く方法

私は私のインデックスページにあるリンクであるために参照していますリンク:すべてのコードとして

@Html.ActionLink("Forgot Password", "forgotPassword", new { controller = "Home" } , new { id = "btn-forgot-password"}) 

はインデックスページ上でモーダルです。

私はこれが私の方法で、MVCのフォームポストを使用しています:

 [HttpGet] 
     [Route("resetpassword")] 
     [AllowAnonymous] 
     public async Task<ActionResult> ResetPassword(ResetPasswordRequest resetPasswordRequest) 
      { 
      ..... 
         return View("ForgotPasswordError"); 
       } 
       else 
       { 
        ....... 
        return View("Index", logInRequest); 
       } 
      } 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
     return View("Index", logInRequest); 
    } 

    [HttpPost] 
    [Route("resetpassword")] 
    public async Task<ActionResult> ResetPassword(ResetPasswordViewModel resetPasswordViewModel) 
    { 
     .... 
     if (ModelState.IsValid) 
     { 
      ...... 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "Please enter the same value again."); 
        return View(resetPasswordViewModel); 
      } 
     } 
     else 
     { 
      ModelState.AddModelError("", "Password is Required Field."); 
      return View(resetPasswordViewModel); 
     } 
     LogInRequest logInRequest = new LogInRequest(); 
     logInRequest.IsThankYouPage = true; 
     return View("Index", logInRequest); 
    } 

そして、これが掲示されて表示される。

@model Models.LogInRequest 
    <link href="~/Content/Styles/ModalStyle.css" rel="stylesheet" /> 
    <link href="~/Content/Styles/style.css" rel="stylesheet" /> 
    @{ 
    Layout = "~/Views/Shared/MasterLayout.cshtml"; 
    } 
    @if (Model != null && Model.IsResetPassword) 
    { 
    <div class="page resetPassword"> 
    @using (Html.BeginForm("resetpassword", "Home", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
     <div class="modal"> 
      <div class="modal-content"> 
       <span class="close">X</span> 
       <h2 id="modal-title">Reset Your Garage Password</h2> 
       <hr /> 
       <div> 
        <div class="create-user-label">Email Address</div> 
        <div><input type="email" name="Email" placeholder="[email protected]" class="create-new-password-textbox-grey" readonly [email protected] /></div> 
        <div class="create-user-label">Password</div> 
        <div><input type="Password" id="Password" name="Password" placeholder="Create Password" class="create-new-password-textbox" onblur="validatePassword();" /></div> 
        <div id="resetPassword-default-message" class="resetPassword-default-message">Password must be at least 8 characters.</div> 
        <div id="resetpassword-message"><label class="resetpassword-error" id="password-error"></label> </div> 
        <div class="create-user-label">Confirm Password</div> 
        <div><input type="Password" name="ConfirmPassword" id="ConfirmPassword" placeholder="Re-enter Password" class="create-new-password-textbox" onblur="validateConfirmPassword();" /></div> 
        <div id="confirmPassword-message"><label class="resetpassword-error" id="confirmPassword-error"></label> </div> 
        <br /> 
        <div> 
         <input type="submit" id="btnSubmit" value="Submit" class="orange-button create-password-button-half" onclick="validatePasswordSubmit();" /> 
         <input type="hidden" value="@Model.Token" name="token" /> 
        </div> 
       </div> 
      </div> 
     </div> 
    } 
</div> 
    } 
    @if(Model.IsThankYouPage) 
    { 
<div id="ThankYou-Page" class="modal"> 
<!-- Modal content --> 
<div class="modal-content"> 
    <div class="close">x</div> 
    <div id="reset"> 
     <div class="modal-heading">Success!</div> 
     <hr class="forgot-password-line" /> 
     <br /> 
     <p>Your password has been successfully reset. Please sign in.</p> 
     <br /> 
    </div> 
</div> 
</div> 
    <script type="text/javascript"> 
    renderThankYouPage(); 
    </script> 
} 
<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script src="~/Scripts/User/CreatePassword.js"></script> 
+1

あなたは何を参照していますか? (あなたの質問は意味をなさない) –

答えて

0

フォームが投稿されたにURLだ、とサーバーからの応答はビューであるため、ユーザーにはそれが表示されます。

ビューを返す代わりに、ユーザーを目的のアクションにリダイレクトします。だから、これに代えて:このような

return View("Index", logInRequest); 

何か:

return RedirectToAction("Index"); 

私はここで本当の問題はlogInRequestあるもの、である、なぜインデックスビューがそれを必要ないと思いますか?理想的にはここでやるべきことはリダイレクトであり、実際には渡すべきデータがないはずです。ユーザーはパスワードをリセットしたので、単に進めることができます。

+0

リンクは現在動作していますが、リターンRedirectToAction( "Index"、logInRequest)のようなモデルを送信する必要があります。 http:// localhost:11580/IsResetPassword = False&IsThankYouPage = True&IsCreatePassword = False&IsCreatePasswordThankYouPage = False – nakisa

+0

@nakisa:リダイレクトは、ブラウザにGETリクエストを実行するように指示するヘッダーのみを返します。あなたが送ることができるものは非常に限られています。 *なぜ*インデックスアクションはこのモデルを必要としますか?ユーザーは通常、索引ページがなくても索引ページにナビゲートできませんか?私はあなたがどこかでデザインミスをしたと思う。 – David

+0

あなたはおそらくデザインミスについて正しいですが、私はインデックスビューに値の一部を表示/非表示にします。 – nakisa

関連する問題