如果未指定名称,如何调用操作方法

时间:2014-05-09 05:49:21

标签: asp.net-mvc arguments actionmethod

在我的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是否传递给方法?如果是这样,那么这两个参数在什么情况下通过,何时不通过?

1 个答案:

答案 0 :(得分:1)

以下是答案:

1. Html.BeginForm()的默认HTTP方法是POST,因此当您提交表单时,会调用带有[HttpPost]的Action方法,其中为HTTP GET方法调用具有相同名称的其他Action方法。

2.当您登录时,即单击“登录”按钮,当您尝试直接访问其他页面而不记录returnUrl设置的位置时,将传递LoginViewModel并且当您重定向到登录页面时将传递returnUrl到您要求的初始页面。

请参阅以下有关BeginForm详细信息的链接。

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