您如何在 MVC 5 视图中拥有多个表单并且一次只提交一个
How do you have multiple forms and only submit one at a time in MVC 5 view
每当我尝试在第一个表单之后提交表单时,它只会调用 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>
}
我没有收到任何错误,它只是导致调用创建评论的操作,而不是调用表单应该执行的操作。
除非您在表单标记中定义操作,否则您的表单将不知道您要提交的操作:
<form action="/edit">
</form>
或者,在您的情况下,在 html 属性部分定义它:
@using (Html.BeginForm("Edit", "Comments", FormMethod.Post, new { @class = "form-control", action = "/edit" })
如果您没有在表单标记中定义特定的操作,表单将假定您只是在页面本身上执行 post-back。您还可以使用以下方式定义按钮本身的操作:
<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
每当我尝试在第一个表单之后提交表单时,它只会调用 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>
}
我没有收到任何错误,它只是导致调用创建评论的操作,而不是调用表单应该执行的操作。
除非您在表单标记中定义操作,否则您的表单将不知道您要提交的操作:
<form action="/edit">
</form>
或者,在您的情况下,在 html 属性部分定义它:
@using (Html.BeginForm("Edit", "Comments", FormMethod.Post, new { @class = "form-control", action = "/edit" })
如果您没有在表单标记中定义特定的操作,表单将假定您只是在页面本身上执行 post-back。您还可以使用以下方式定义按钮本身的操作:
<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