带有2个提交按钮/操作的ASP.NETMVC4表单

带有2个提交按钮/操作的ASP.NETMVC4表单,asp.net,razor,Asp.net,Razor,我在ASP.Net和razor中有一个表单 我需要有两种方式提交上述表单:一种是通过编辑操作,另一种是通过验证操作 我该怎么做呢 我不介意为此使用JavaScript 编辑: 使用自定义属性,我得到了这个错误 当前对控制器类型“InspecoesController”的操作“Resultados”的请求在以下操作方法之间不明确: System.Web.Mvc.ActionResult Validar(System.Collections.Generic.ICollection1[Waveform

我在ASP.Net和razor中有一个表单

我需要有两种方式提交上述表单:一种是通过
编辑
操作,另一种是通过
验证
操作

我该怎么做呢

我不介意为此使用JavaScript

编辑:

使用自定义属性,我得到了这个错误

当前对控制器类型“InspecoesController”的操作“Resultados”的请求在以下操作方法之间不明确: System.Web.Mvc.ActionResult Validar(System.Collections.Generic.ICollection
1[Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel]),位于Waveform.IEP.Intus.Server.Web.Controllers.InspecoesController类型上
System.Web.Mvc.ActionResult Resultados(System.Collections.Generic.ICollection
1[Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel]),在类型为Waveform.IEP.Intus.Server.Web.Controllers.InspecoesController上


您可以使用jquery来实现这一点,只需将两种方法提交到不同的URL,例如,使用以下表单:

<form id="myForm">
    <%-- form data inputs here ---%>
    <button id="edit">Edit</button>
    <button id="validate">Validate</button>
</form>

编辑
验证
您可以使用此脚本(确保它位于视图中,以便使用Url.Action属性):


$(“#编辑”)。单击(函数(){
var form=$(“form#myForm”);
form.attr(“action”)、@Url.action(“Edit”、“MyController”);
表单提交();
});
$(“#验证”)。单击(函数(){
var form=$(“form#myForm”);
form.attr(“action”)、@Url.action(“Validate”、“MyController”);
表单提交();
});

我们的应用程序就是这样的:
属性

用它装饰的动作:

HTML/Razor

@使用(@Html.BeginForm())
{
}
name
提交按钮的属性应与操作/方法名称匹配

这样,您就不必在javascript中硬编码URL了,这里有一个很好的解释:

两个字:
您可以在您的操作中分析已提交按钮的值


使用您版本的
操作方法SelectorAttribute(我个人更喜欢并建议您这样做)。

如果您使用razor在asp.net中工作,并且希望控制多个提交按钮事件,则此答案将指导您。例如,我们有两个按钮,一个按钮将我们重定向到“PageA.cshtml”,另一个按钮将我们重定向到“PageB.cshtml”

@{
如果(IsPost)
{
如果(请求[“btn”]。等于(“按钮A”))
{
重定向(“PageA.cshtml”);
}
如果(请求[“btn”].等于(“按钮B”))
{
重定向(“PageB.cshtml”);
}
}
}
;
;          


对于HTML5,您可以使用:


提交
验证

我们可以通过两种方式实现

在同一视图中有2个表单提交,在控制器中有2个操作方法,但您需要有所需的字段与要放置在其中的表单一起提交

ex在这里与代码一起给出

有2个或多个提交按钮,如btnSubmit1和btnSubmit2,并检查使用代码单击哪个按钮的操作方法

if (Request.Form["btnSubmit1"] != null)
{
 //
}
if (Request.Form["btnSubmit2"] != null)
{
 //
}

我不知道
form.attr()
。这应该能奏效。谢谢。使用javascript/jquery,您可以使用
attr()
操作任何dom属性,尤其是元素属性。如果您不确定是否有一种方法需要使用jquery文档()-这有很多知识..您应该使用
#edit
语法而不是
按钮#edit
,假设您在不同的元素类型之间没有重复的ID(这是我能看到使用的唯一原因)。按ID查询要快得多。如果您在RHS上使用非ID选择器,您的情况会好一点,因为它会缩小列表。但是,由于普通ID选择器使用
DOM.getElementById(“”)
(至少,不必首先查找所有
按钮
元素),它会更快。@JoeBrockhaus-这与此问题无关,但这是一个好问题,因此我更正了我的答案。同意,无关:)很高兴我能提供帮助!我的答案是:完美!使用JQuery/Javascript顺便说一句,在视图中使用非常快速和简单的实现,而不是混乱的代码,对于自定义ActionMethodSelectorAttribute方法,这个类放在哪里?是否需要以某种方式将其注册到框架中?是否为表单设置了
action
属性值<代码>@使用(Html.BeginForm())
就足够了。这很奇怪,因为在写这篇评论的时候,我实现了完全相同的东西,而且效果很好。我已经将我的重命名为ButtonNameActionAttribute:这样控制器看起来更干净,触感更明显。这在紧要关头很容易,但当同一控制器中有其他操作方法时,会导致许多其他问题。更不用说视图和控制器之间的隐式契约(大禁忌)。我选择了一个轻量级的JS函数,在提交之前更改表单操作,比如@ŁukaszW.pl belowI,就像这种方法一样。如果您想添加HTML属性,例如用于引导,同时保持无参数的
HTML.BeginForm()
的默认行为,您可以将null传递给action和controller。下面是一个例子:
Html.BeginForm(null,null,FormMethod.Post,new{@class=“form horizontal”,role=“form”})
@Ramunas,正如人们在上面告诉你的,这是一个很好的解决方案!不是说它有效,但它也是一种聪明的方法,我非常喜欢它。真不敢相信你得到了a-1,这也发生在我身上,每个人都知道,然后-可能有一些帽子在上面。投票支持我!:-)有关MVC6,请参见
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
            return true;

        var request = controllerContext.RequestContext.HttpContext.Request;
        return request[methodInfo.Name] != null;
    }
}

[HttpParamAction]
public ActionResult Save(MyModel model)
{
    // ...
}

[HttpParamAction]
public ActionResult Publish(MyModel model)
{
    // ...
}
@using (@Html.BeginForm())
{
    <!-- form content here -->
    <input type="submit" name="Save" value="Save" />
    <input type="submit" name="Publish" value="Publish" />
}
@{
  if (IsPost)
    {
       if(Request["btn"].Equals("button_A"))
        {
          Response.Redirect("PageA.cshtml");
        }
      if(Request["btn"].Equals("button_B"))
        {
          Response.Redirect("PageB.cshtml");
        }
  }
}
<form method="post">
   <input type="submit" value="button_A" name="btn"/>;
   <input type="submit" value="button_B" name="btn"/>;          
</form>
<form action="Edit">
  <button type="submit">Submit</button> <!-- Will post to default action "Edit" -->
  <button type="submit" formaction="Validate">Validate</button> <!-- Will override default action and post to "Validate -->
</form>
if (Request.Form["btnSubmit1"] != null)
{
 //
}
if (Request.Form["btnSubmit2"] != null)
{
 //
}