我有剃刀形式。这是表格中有用的部分。
<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);
网址更改为
example.org/login/ForgotPassword
我希望它保留example.org/login?user=123
,因为页面未成功提交且正在使用URL参数。
答案 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时价值将在那里。 (您不会在查询字符串中使用它,但在提交表单时它将在请求正文中。