我正在使用Html.BeginForm在登录页面上重构一段代码。我认为它使用查询参数,我不是查询参数的忠实粉丝。我一直使用Ajax来调用具有重型模型的服务器(或者在这种情况下像登录模型这样的敏感模型)
现在,用户在登录成功时看不到两种方法之间的任何差异,因为用户在登录过程结束时会被重定向。但是,当Login失败并且Code停留在同一页面上以显示错误时,它实际上会在URL(包括用户名和密码)中显示按查询参数序列化的整个模型。
我已经用Ajax替换了代码,似乎工作正常。但是,由于这不是我的代码,我只是想确保
答案 0 :(得分:1)
您尚未显示所有相关代码(控制器方法),但有两个原因可以解释为什么您的网址会包含username
和password
值。
1)您查看的表单正在进行GET调用,例如您已使用
@using (Html.BeginForm(yourActionName, yourControllerName, FormMethod.Get))
在这种情况下,您需要将其设为FormMethod.Post
,并在控制器中包含一个接受该模型的[HttpPost]
方法。
2)另一种可能性是,如果模型无效,您的POST方法将重定向回GET方法(并将username
和password
值传递给它),在这种情况下,请不要重定向,但改为返回视图
[HttpPost]
public ActionResult Login(LoginModel model)
{
// add `ModelStateError` is login fails
if (!ModelState.IsValid)
{
return View(model);
}
// redirect
}
请注意,使用Html.BeginForm()
是一个离开当前页面的标准提交(在POST方法中,您可以重定向或返回“相同”视图的另一个副本),而使用ajax方法则保留在同一页面上,所以他们是两个完全不同的东西。在您的情况下,您最终希望在成功登录后重定向到另一个页面,因此使用ajax没有意义。