37

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

我需要有两种提交所述表单的方式:一种通过Edit操作,另一种通过Validate操作。

我该怎么做呢?

我不介意为此使用 JavaScript。

编辑:

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

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

4

7 回答 7

75

这就是我们在应用程序中所拥有的:
属性

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)
{
    // ...
}

HTML/剃刀

@using (@Html.BeginForm())
{
    <!-- form content here -->
    <input type="submit" name="Save" value="Save" />
    <input type="submit" name="Publish" value="Publish" />
}

name提交按钮的属性应该匹配动作/方法名称

这样您就不必在 javascript 中对 url 进行硬编码

于 2013-05-10T10:25:34.443 回答
43

您可以使用 jquery 来完成,只需将两种方法提交到不同的 url,例如使用此表单:

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

你可以使用这个脚本(确保它位于视图中,以便使用 Url.Action 属性):

<script type="text/javascript">
      $("#edit").click(function() {
          var form = $("form#myForm");
          form.attr("action", "@Url.Action("Edit","MyController")");
          form.submit();
      });

      $("#validate").click(function() {
          var form = $("form#myForm");
          form.attr("action", "@Url.Action("Validate","MyController")");
          form.submit();
      });
</script>
于 2013-05-10T10:17:52.617 回答
8

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

@{
  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>

于 2014-02-14T16:25:48.837 回答
5

这是一个很好的解释: ASP.NET MVC – 相同形式的多个按钮

简而言之:
您可以在您的操作中分析提交按钮的值,
或者使用您的版本(我个人更喜欢和建议)
进行单独的操作。ActionMethodSelectorAttribute

于 2013-05-10T10:33:03.243 回答
4

使用 HTML5,您可以使用button[formaction]

<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>
于 2016-11-09T08:20:00.050 回答
3

<input type="submit" value="Create" name="button"/>
<input type="submit" value="Reset" name="button" />

在 Controler 中编写以下代码。

[HttpPost]
        public ActionResult Login(string button)
        {
            switch (button)
            {
                case "Create":
                    return RedirectToAction("Deshboard", "Home");
                    break;
                case "Reset":
                    return RedirectToAction("Login", "Home");
                    break;
            }

            return View();
        }
于 2015-12-16T16:41:09.283 回答
1

我们可以通过两种方式获得它,

要么在同一个视图中有 2 个表单提交,并且在控制器上有 2 个 Action 方法,但您需要提交必填字段以及要放置在其中的表单

ex 在这里给出了代码多个表单在视图 asp.net mvc 中具有多个提交按钮

或者

有 2 个或多个提交按钮说 btnSubmit1 和 btnSubmit2 并检查 Action 方法使用代码单击了哪个按钮

if (Request.Form["btnSubmit1"] != null)
{
 //
}
if (Request.Form["btnSubmit2"] != null)
{
 //
}
于 2016-12-22T14:24:20.670 回答