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>
 }

今、私は2つの質問があります:

1.コントローラー内に同名のアクションメソッドが存在する。違いは、もう一方には [HttpPost] 属性がないことです。上記のアクションメソッドが呼び出され、他のアクションメソッドが呼び出されないのはなぜですか?

2.アクション メソッドの両方の引数が null とは異なります。呼び出されたアクション メソッドに渡される情報。モデルと URL がメソッドに渡されていると推測できますか? もしそうなら、これらの 2 つのパラメーターはどのような状況で渡され、渡されないのはいつですか?

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 に答える