【问题标题】:How do you have multiple forms and only submit one at a time in MVC 5 view您如何在 MVC 5 视图中拥有多个表单并且一次只提交一个
【发布时间】:2019-10-10 22:54:25
【问题描述】:

当我尝试在第一个表单之后提交表单时,它只是调用该 post 方法,而不是用于提交按钮当前所在的表单的方法。我的印象是,无论您提交按钮的形式是什么,都会在页面上触发。

使用 ajax 辅助函数来解决它,但它并没有按照我想要的方式工作。

下面是部分代码here 是完整的。


            Html.BeginForm("Create", "Comments", FormMethod.Post, new { @class = "form-control" });
            {
                @Html.AntiForgeryToken()
                @Html.Hidden("BlogPostId", Model.Id);
                <div class="row">
                    <div class="col-12">
                        @Html.Editor("Content", new { htmlAttributes = new { @id = "richTextEditor", @class = "form-control textarea", @placeholder = "Enter comment here.", @rows = 5, @cols = 10 } })
                    </div>
                </div>
                <div class="row" style="padding-top:2%">
                    <div class="col-2">
                        <button type="submit" class="btn btn-info waves-effect waves-light m-r-10">Submit</button>
                    </div>
                </div>
            }
@using (Html.BeginForm("Edit", "Comments", FormMethod.Post, new { @class = "form-control" }))
                                            {
                                                @Html.AntiForgeryToken()
                                                @Html.Hidden("Id", comment.Id);
                                                @Html.Hidden("BlogPostId", comment.BlogPostId);
                                                @Html.Hidden("AuthorId", comment.AuthorId);
                                                @Html.Hidden("CreateDate", comment.CreateDate);
                                                @Html.Hidden("UpdateDate", comment.UpdateDate);
                                            <div class="row">
                                                <div class="col-12">
                                                    @Html.Editor("UpdateReason", new { htmlAttributes = new { @class = "form-control", @placeholder = "Enter comment here.", @rows = 5, @cols = 10 } })
                                                </div>
                                            </div>
                                            <div class="row">
                                                <div class="col-12">
                                                    @Html.Editor("Content", new { htmlAttributes = new { @id = "richTextCommentEditor", @class = "form-control textarea", @placeholder = "Enter comment here.", @rows = 5, @cols = 10 } })
                                                </div>
                                            </div>
                                            <div class="row" style="padding-top:2%">
                                                <div class="col-2">
                                                    <button type="submit" class="btn btn-info waves-effect waves-light m-r-10">Submit</button>
                                                </div>
                                            </div>
                                        }

我没有收到任何错误,它只是导致调用创建评论的操作,而不是表单应该执行的操作。

【问题讨论】:

    标签: c# model-view-controller asp.net-mvc-5


    【解决方案1】:

    除非您在表单标签中定义操作,否则您的表单不会知道您尝试提交的操作:

    <form action="/edit">
    </form>
    

    或者,在您的情况下,在 html 属性部分中定义它:

    @using (Html.BeginForm("Edit", "Comments", FormMethod.Post, new { @class = "form-control", action = "/edit" })
    

    如果您没有在表单标签中定义特定操作,表单将假定您只是在页面本身上执行回发。您还可以使用以下方法定义按钮本身的操作:

    <button type="submit" class="btn btn-info waves-effect waves-light m-r-10" formaction="/edit">Submit</button>
    

    您可以在 w3Schools 了解有关动作和形式动作的更多信息: https://www.w3schools.com/tags/att_form_action.asp https://www.w3schools.com/tags/att_button_formaction.asp

    【讨论】:

    • 他没有定义一个动作,但他指定了两个不同的控制器函数来发布。这还不够好吗?
    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多