我正處在學習MVC的過程中,這是一種不同的思維方式,我以一個簡單的登錄表單爲例,但讓我困惑的一件事是我如何將將按鈕提交給Action並傳遞該對象。讓我舉個例子。在mvc中傳遞一個對象給控制器
這裏是示範
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;
}
}
這裏是查看
@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 ActionResult Login()
而不是第二次超載public ActionResult Login(ExternalUser user)
這是我會ex你能告訴我我錯過了爲什麼它沒有達到正確的方法嗎?
謝謝
你很確定嗎?你的代碼應該工作正常。它應該提交數據到你的HttpPost登錄方法。你怎麼知道這是第一次行動?你是否在你的行動方法中加入了一個斷點並驗證它? – Shyju
您的表單以某種方式發出GET請求而不是POST請求?什麼是實際的'form'標籤?當你在瀏覽器的調試工具中監視請求時,它是什麼類型的請求?它是否包含您期望的數據?你具體如何確認你所看到的行爲? – David
@shyju那正是我所做的。斷點確認它將採用錯誤的方法 – Coesy