私はMVCを学ぶ途中ですが、これはまったく別の考え方です。単純なログインフォームを例として取り上げましたが、私を混乱させる1つの問題は、アクションにボタンを送信し、オブジェクトを渡します。私に例を挙げましょう。MVCでコントローラにオブジェクトを渡す
はここでここで見るここ
@model ExternalUser
@{
ViewBag.Title = "Login";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true, "Login failed. Check your login details.");
<div>
<fieldset>
<legend>Login</legend>
<div class="editor-label">
@Html.LabelFor(u => u.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(u => u.UserName)
@Html.ValidationMessageFor(u => u.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(u => u.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(u => u.Password)
@Html.ValidationMessageFor(u => u.Password)
</div>
<div class="editor-label">
@Html.CheckBoxFor(u => u.RememberMe)
@Html.LabelFor(u => u.RememberMe)
</div>
<input type="submit" value="Log In" />
</fieldset>
</div>
}
は私がログインボタンをクリックすると
public class UserController : Controller
{
// GET: /User/
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult Login()
{
return View();
}
[HttpPost]
public ActionResult Login(ExternalUser user)
{
if (ModelState.IsValid)
{
if (user.IsValid())
{
FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "Login data is incorrect!");
}
}
return View(user);
}
public ActionResult Logout()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Home");
}
}
が、それは最初のオーバーロードに行くのコントローラーがされているモデル
public class ExternalUser
{
[Display(Name = "User Name")]
[MaxLength(50)]
public string UserName { get; set; }
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember Me")]
public bool RememberMe { get; set; }
public bool IsValid()
{
return true;
}
}
ですpublic ActionResult Login()
であり、第2のオーバーロードはpublic ActionResult Login(ExternalUser user)
ではありません。私はなぜそれが正しい方法に当てられていないのか分からないことを教えてくれますか?
ありがとうございました
あなたはそれについて非常に確かですか?あなたのコードは正常に動作するはずです。 HttpPostログインメソッドにデータを送信する必要があります。あなたはそれが最初の行動に行くことをどのように知っていますか?アクションメソッドにブレークポイントを設定して確認しましたか? – Shyju
あなたのフォームは何とか 'POST'リクエストの代わりに' GET'リクエストを発行していますか?実際の 'form'タグは何ですか?ブラウザのデバッグツールでリクエストを監視するとき、どのタイプのリクエストですか?それはあなたが期待するデータを含んでいますか?あなたはどのように具体的にあなたが見ている行動を確認していますか? – David
@ shyjuそれはまさに私がやったことです。ブレークポイントが間違った方法になっていることを確認しました – Coesy