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没有击中控制器/动作的主要内容,如果未能解决你的问题,请参考以下文章

处理对 ASP.NET MVC 操作的 CORS 预检请求

MVC 4 - JSON ajax 动作结果的 GZIP 压缩 [重复]

控制器中带有操作的 GET 和 POST - VB.NET 2012 MVC 4

从 MVC 控制器动作调用 APIController 动作

如何将 javascript 对象传递给 C# MVC 4 控制器

MVC 4 - 对象引用未设置为对象的实例。当 POST 动作和索引每一行时