在我的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 (也是上述操作方法的第一个参数)类强类型的,操作方法是这样调用的:
@using(Html.BeginForm()) {
@Html.EditorForModel()
<p><input type="submit" value="Log in" /></p>
}现在我有两个问题:
1.控制器中有另一个名称相同的动作方法。区别在于另一个没有HttpPost属性。为什么调用上述操作方法而不调用另一个操作方法?
2.动作方法的两个参数与null不同。传递给被调用的action方法的信息。可以推断模型和url被传递给该方法吗?若然,那麽在甚麽情况下才能通过这两部婴儿车呢?
发布于 2014-05-09 06:07:47
以下是答案:
1. Html.BeginForm()的默认HTTP方法是POST,因此当您提交表单时,将调用带有HttpPost的Action,其中HTTP方法作为其他同名动作方法被调用。
2.当您通过单击“登录”按钮登录(即通过单击“登录”按钮)登录时,当您尝试直接访问另一个页面而不记录设置为初始页面的LoginViewModel设置为初始页面时,当您被重定向到登录页时,returnUrl将被传递。
有关BeginForm详细信息,请参阅下面的链接。
http://msdn.microsoft.com/en-us/library/system.web.mvc.html.formextensions.beginform%28v=vs.118%29.aspx
https://stackoverflow.com/questions/23557453
复制相似问题