首页 > 解决方案 > MVC Razor 表单按钮未调用指定的控制器

问题描述

所以在我看来,我有:

<div id="createProductModal" class="modal fade" tabindex="-1" role="dialog">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Create Product</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                    @using (Html.BeginForm("Create", "Product", FormMethod.Post, new { id = "createProductForm", @class = "form-horizontal"}))
                    {
                        <div class="form-group">
                            <div class="col-md-4">
                                @Html.LabelFor(m => Model.Product.Name, new { @class = "control-label" })
                            </div>
                            <div class="col-sm-8">
                                @Html.TextBoxFor(m => Model.Product.Name, new { @class = "form-control" })
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-4">
                                @Html.LabelFor(m => Model.Product.IsActive, new { @class = "control-label" })
                            </div>
                            <div class="col-sm-8">
                                @Html.CheckBoxFor(m => Model.Product.IsActive, new { @class = "form-control" })
                            </div>
                        </div>
                    }
            </div>
            <div class="modal-footer">  
                <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="$('#createProductForm').submit();">Add product</button>
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
            </div>
        </div>
    </div>
</div>

然后在我的ProductsController我添加了一个像这样的动作:

[HttpPost]
public ActionResult Create(Product product)
{
   return View();
}

但由于某种原因,当单击提交时,它会将我重定向到此 URL:

http://localhost/Product/Create

并抛出一个 404 错误,如下所示:

The resource cannot be found.

我没有在路由配置中定义路由,这应该没关系吧?

有谁明白我似乎做错了什么?

标签: c#asp.net-mvcrazor

解决方案


第二个参数Html.BeginForm是控制器名称。鉴于您有一个ProductsController, 而不是

Html.BeginForm("Create", "Product", ...

尝试

Html.BeginForm("Create", "Products"

检查FormExtensions.BeginForm


推荐阅读