首页 > 解决方案 > 在表单中调用超过 1 个操作

问题描述

我正在对客户端 API 进行一些更改,其中包括一些表单验证和内容。

我正在尝试为表单设置超过 1 个提交句柄,因为我有 2 个具有不同操作的按钮,它们将整个表单作为参数,但我无法在互联网上阅读有关多个处理程序的内容来实现它。

这是我到目前为止所拥有的

@using (Html.BeginForm("ValidarFormulario", "Cotacao", FormMethod.Post, new { id = "frm" }))
{
   ...
}

“ValidarFormulario”是必须由“提交”调用的主要方法,它可以工作,但我想要一个“保存”的新按钮,它将在单独的方法中执行其他操作

<a class="btn btn-primary" formaction="SalvarFormulario" value="SalvarFormulario" href='##'>Salvar</a>

我的 API 中有这两种方法,ValidarFormulario并且SalvarFormulario,如何通过 2 个不同的按钮将相同的新表单发布到两条路线?

标签: htmlasp.net-mvcrazor

解决方案


我最终写了一篇关于这个问题的博客,这里是示例的链接:

提交表单时有不同​​的方式来指示操作方法:

1. 表单内的提交按钮(默认行为):

这是最常见的场景,我们在表单中有一个提交按钮。当我们提交表单时,它是回发到表单的提交操作:

@using (Html.BeginForm("Enroll", "Home", FormMethod.Post))
{
   <div class="form-group">
      @Html.LabelFor(m => m.Name)
      @Html.TextBoxFor(model => model.Name, new {@class="form-control"}) 
   </div>

   // form is postback to /Home/Enroll
   <input type="submit" value="Enroll" class="btn"/>
}

2.表单外提交按钮:

如果您的提交按钮在表单之外,您可以使用该form属性来指示应该用于回发的表单:

@using (Html.BeginForm("Enroll", "Home", FormMethod.Post, new { id = "myFrom" }))
{
   <div class="form-group">
      @Html.LabelFor(m => m.Name)
      @Html.TextBoxFor(model => model.Name, new {@class="form-control"}) 
    </div>
}

// submit button is outside the form, it would postback to form's postback action: /Home/Enroll
<input type="submit" value="Enroll (outside)" form="myFrom" class="btn"/>

3. 多个提交按钮,回发到不同的操作方法: 如果您有多个提交按钮,并且希望每个按钮回发到不同的操作,那么formaction在您的按钮上使用属性:

@using (Html.BeginForm("Enroll", "Home", FormMethod.Post))
{
   <div class="form-group">
      @Html.LabelFor(m => m.Name)
      @Html.TextBoxFor(model => model.Name, new {@class="form-control"}) 
   </div>

   // your main submit button will post back to: /Home/Enroll (default behavior)
   <input type = "submit" value="Enroll" class="btn"/>
   // your Delete button will post back to: /Home/Delete
   <input type = "submit" value="Delete" formaction="@Url.Action("Delete")" formmethod="post" class="btn" />
}

推荐阅读