0

在我的 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.action方法的两个参数都不是null。将哪些信息传递给调用的操作方法。可以推断出模型和url被传递给方法吗?如果是这样,那么这两个参数在什么情况下通过,什么时候不通过?

4

1 回答 1

1

以下是答案:

1.Html.BeginForm()的默认HTTP方法是POST,所以当你提交表单时,会调用带有[HttpPost]的Action方法,而HTTP GET方法会调用其他同名的Action方法。

2.当您登录时,即通过单击“登录”按钮将传递 LoginViewModel,当您尝试直接访问另一个页面而不记录 returnUrl 设置为初始页面时,当您被重定向到登录页面时,将传递 returnUrl你已经要求了。

有关 BeginForm 的详细信息,请参见下面的链接。

http://msdn.microsoft.com/en-us/library/system.web.mvc.html.formextensions.beginform%28v=vs.118%29.aspx

于 2014-05-09T06:07:47.163 回答