在表单提交失败网址正在改变

时间:2017-10-29 01:19:22

标签: asp.net-mvc razor

我有剃刀形式。这是表格中有用的部分。

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

    }
}

用户访问此页面时URLexample.org/login?user=123

return View("ForgotPassword", vm);网址更改为

之后
example.org/login/ForgotPassword

我希望它保留example.org/login?user=123,因为页面未成功提交且正在使用URL参数。

1 个答案:

答案 0 :(得分:0)

您可以将用户的查询字符串值作为路由值传递。

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

当razor执行此代码时,它将使用包含用户密钥和值的查询字符串呈现表单标记。

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

</form>

另一个选项是在GET操作方法中设置视图模型的User属性,帮助器将生成值设置为该值的input元素,当您将其提交到post并且代码返回View时价值将在那里。 (您不会在查询字符串中使用它,但在提交表单时它将在请求正文中。