在我的LoginController中,我有以下操作方法:
[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl) {
if (ModelState.IsValid) {
if (authProvider.Authenticate(model.UserName, model.Password)) {
return Redirect(returnUrl ?? Url.Action("Index", "Admin"));
} else {
ModelState.AddModelError("", "Incorrect username or password");
return View();
}
} else {
return View();
}
}
相应的视图是使用LoginViewModel(也是上述操作方法的第一个参数)强类型的,这就是调用action方法的方法:
@using(Html.BeginForm()) {
@Html.EditorForModel()
<p><input type="submit" value="Log in" /></p>
}
现在我有两个问题:
1.控制器中有另一个同名的动作方法。区别在于另一个没有[HttpPost]属性。为什么上面的操作方法被调用而不是另一个?
2. action方法的两个参数与null不同。将哪些信息传递给调用的操作方法。可以推断模型和url是否传递给方法?如果是这样,那么这两个参数在什么情况下通过,何时不通过?
答案 0 :(得分:1)
以下是答案:
1. Html.BeginForm()的默认HTTP方法是POST,因此当您提交表单时,会调用带有[HttpPost]的Action方法,其中为HTTP GET方法调用具有相同名称的其他Action方法。
2.当您登录时,即单击“登录”按钮,当您尝试直接访问其他页面而不记录returnUrl设置的位置时,将传递LoginViewModel并且当您重定向到登录页面时将传递returnUrl到您要求的初始页面。
请参阅以下有关BeginForm详细信息的链接。