[英]Passing an object to controller in mvc
我正处于学习MVC的过程中,这是一种不同的思维方式,我以一个简单的登录表单为例,但令我困惑的一件事是如何将Submit按钮绑定到Action并传递对象。 让我举个例子。
这是模型
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)
的第二个重载,这是我所期望的,您能告诉我我所缺少的吗为什么没有找到正确的方法?
谢谢
想不到为什么它不起作用的原因。 但是,尽管如此,仍要使用inspect element
选项inspect element
在浏览器中生成的HTML。 如果<form>
标记的操作属性值设置为'GET'或完全缺少操作属性,请尝试将其明确指定为post。
Html.BeginForm("Login", "User", FormMethod.Post)
我意识到我已经在/Shared/SiteLayout.cshtml中添加了一个额外的<form>
标记,因此导致在页面上放置了两个<forms>
,在删除共享文件夹中的一个后,它现在会触发正确的方法! 我希望这对以后的人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.