MVC 4 Post没有击中控制器/动作
Posted
技术标签:
【中文标题】MVC 4 Post没有击中控制器/动作【英文标题】:MVC 4 Post not hitting controller/action 【发布时间】:2015-06-19 08:35:33 【问题描述】:我在 MVC 4 中遇到了一个非常烦人的问题,我的表单帖子没有达到我指定的操作。我以前做过很多次,效果很好,但在我的新项目中,它似乎根本不起作用。
这是一个简单的登录页面,没有什么花哨的,只是一个用户名和密码字段。这是我的代码
html/Razor:
@model XYZ.Models.PageModels.LoginPageModel
<div class="login">
<form class="left form">
@using (Html.BeginForm("Login", "Account", FormMethod.Post))
<div class="form-group form-group-sm">
<label class="control-label" for="UserName">User Name</label>
@Html.TextBoxFor(model => model.UserName, new @class="form-control", @placeholder="User Name")
</div>
<div class="form-group form-group-sm">
<label class="control-label" for="Password">Password</label>
@Html.PasswordFor(model => model.Password, new @class="form-control", @placeholder="Password")
</div>
<div class="buttons right">
<input type="submit" class="btn btn-primary btn-sm" value="Login" />
</div>
</form>
</div>
控制器:
public class AccountController : Controller
public ActionResult Login()
return View();
[HttpPost]
public ActionResult Login(LoginPageModel model)
throw new Exception("I'm here!");
return View();
路线配置:
routes.MapRoute(
name: "Default",
url: "controller/action/id",
defaults: new controller = "Home", action = "Index", id = UrlParameter.Optional
);
型号:
public class LoginPageModel
[Required(ErrorMessage = "User Name required")]
public string UserName get; set;
[Required(ErrorMessage = "Password required")]
public string Password get; set;
有什么想法吗? 谢谢!
【问题讨论】:
看起来缺少的指令是你的控制器 不确定这是否有帮助或有所作为,但该项目还包括 Web API。 【参考方案1】:您的标记中有嵌套表单。一个是您自己编写的,另一个是从 Html.BeginForm
辅助方法生成的。摆脱外部的,你就可以走了。
这应该可以正常工作。
<div class="login">
@using (Html.BeginForm("Login", "Account"))
<div class="form-group form-group-sm">
<label class="control-label" for="UserName">User Name</label>
@Html.TextBoxFor(model => model.UserName, new @class = "form-control", @placeholder = "User Name" )
</div>
<div class="form-group form-group-sm">
<label class="control-label" for="Password">Password</label>
@Html.PasswordFor(model => model.Password, new @class = "form-control", @placeholder = "Password" )
</div>
<div class="buttons right">
<input type="submit" class="btn btn-primary btn-sm" value="Login" />
</div>
</div>
【讨论】:
我不敢相信就是这样!我认为这是一个div,而不是一个表单。谢谢,我现在要去验眼了。以上是关于MVC 4 Post没有击中控制器/动作的主要内容,如果未能解决你的问题,请参考以下文章
MVC 4 - JSON ajax 动作结果的 GZIP 压缩 [重复]
控制器中带有操作的 GET 和 POST - VB.NET 2012 MVC 4
从 MVC 控制器动作调用 APIController 动作