title: How does the controller receive parameters on HttpPost methods?
body: <p>Take this snippet out of a controller, for example:</p>
  
  <pre><code>public ActionResult Login()
  {
      if (User.Identity.IsAuthenticated)
      {
          return RedirectToAction("Index", "Home");
      }
      else
      {
          return View();
      }
  }
  
  //
  // POST: /User/Login
  
  [HttpPost]
  public ActionResult Login(LoginModel lm, string returnUrl)
  {
      if (ModelState.IsValid)
      {
          if (Membership.ValidateUser(lm.UserName, lm.Password))
          {
              FormsAuthentication.SetAuthCookie(lm.UserName, lm.RememberMe);
              if (Url.IsLocalUrl(returnUrl) &amp;&amp;
                  returnUrl.Length &gt; 0 &amp;&amp;
                  returnUrl.StartsWith("/") &amp;&amp;
                  !returnUrl.StartsWith("//") &amp;&amp;
                  !returnUrl.StartsWith("/\\"))
              {
                  return Redirect(returnUrl);
              }
              else
              {
                  return RedirectToAction("Index", "Home");
              }
          }
          else
          {
              ModelState.AddModelError("", "Username and Password combination is incorrect");
          }
      }
  
      return View();
  }
  </code></pre>
  
  <p>My question is, with the overloaded method of <code>Login()</code> (for the HTTP POST), what calls this method with the first parameter as a <code>LoginModel</code> class, and the second parameter as a <code>string</code>?  My Login.cshtml view uses a submit button, so I am curious as to how these parameters get passed to the <code>Login()</code> method?  What's to stop me from adding a third parameter?  And how would that parameter get passed??</p>
  
  <p>I know this is a basic question, I'm just trying to understanding the connecting piece between Views and Controllers.</p>