2017-10-29 87 views
0

我有一個剃刀形式。這是表單的有用部分。對錶單提交失敗url正在改變

<div id="forgotBox" style="display:none;" class="col-xs-12 col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 centerit"> 
<div class="col-md-12"> 


    @using (Html.BeginForm("ForgotPassword", "Login", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 

     <div class="form-group"> 
      @Html.EditorFor(x => x.user, new { htmlAttributes = new { @class = "form-control", placeholder = "Email" } })<br /> 
      @Html.ValidationMessageFor(x => x.user) 
     </div> 

     if (!String.IsNullOrWhiteSpace(ViewBag.ErrorMsg)) 
     { 
      <div class="form-group field-validation-error"> 
       @ViewBag.ErrorMsg 
      </div> 
     } 
     <div class="form-group"> 
      <input type="submit" class="btn btn-primary" /> 
     </div> 
    } 

    <div><a href="javascript:showLogin();">Login</a></div> 
</div> 

這裏是它調用控制器方法:

[HttpPost] 
    public ActionResult ResetPassword(LoginViewModel vm) 
    { 
      ViewBag.ErrorMsg = ""; 
      if (vm.confirmpass != vm.newPass) 
      { 
       //some error condition 
       ViewBag.ErrorMsg = "Passwords do not match."; 
      } else if (!String.IsNullOrWhiteSpace(vm.user)){ 
       //code here for when you want to process when we have the userID 
      } 


      return View("ForgotPassword", vm); 
     } 

    } 
} 

URL當用戶到達這個頁面example.org/login?user=123

return View("ForgotPassword", vm);的URL更改後

example.org/login/ForgotPassword 

我希望它保持example.org/login?user=123,因爲頁面未成功提交併且正在使用URL參數。

回答

0

您可以將用戶的querystring值作爲路由值傳遞。

@using (Html.BeginForm("ResetPassword", "Login", new { user = Request["user"] })) 
{ 
} 

當剃鬚刀執行此代碼時,它將渲染帶查詢字符串的窗體標籤,其中包含用戶鍵和值。

<form action="/Login/ResetPassword?user=123" method="post"> 

</form> 

另一種選擇是設置你的視圖模型的用戶屬性的GET操作方法和助手將生成設置爲該值值的輸入元素,當你提交後,當你的代碼返回到視圖,價值將在那裏。 (你不會在查詢字符串中,但它會在請求正文中提交表單時。

+0

你是在說我擺脫了'new {enctype =「multipart/form-data」})) ' – codeNinja

+0

你爲什麼需要這個?當你想發送一個文件(文件上傳)時你需要這個屬性, – Shyju