ASP.Net MVC 4 Форма с двумя кнопками/действиями отправки

У меня есть форма в ASP.Net и бритве.

Мне нужно иметь два способа отправки указанной формы: один, который проходит через действие Edit, а другой - через действие Validate.

Как мне это сделать?

Я не против использования JavaScript для этого.

EDIT:

Используя пользовательский атрибут, я получаю эту ошибку.

Текущий запрос действия "Resultados" на тип контроллера "InspecoesController" неоднозначен между следующими методами действий:     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.ICollection 1 [Waveform.IEP.Intus.Server.Web.ViewModels.ResultadoViewModel]) по типу Waveform.IEP.Intus.Server.Web.Controllers. InspecoesController

+36
источник поделиться
7 ответов

Что мы имеем в наших приложениях:
Атрибут

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 атрибут кнопки отправки должен соответствовать имени действия/метода

Таким образом, вам не нужно жестко кодировать URL-адреса в javascript

+73
источник

Вы можете сделать это с помощью jquery, просто поставьте два метода для отправки на разные URL-адреса, например, с помощью этой формы:

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

вы можете использовать этот script (убедитесь, что он находится в представлении, чтобы использовать атрибут 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>
+44
источник
другие ответы

Связанные вопросы


Похожие вопросы

Если вы работаете в 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>

+8
источник

Вот хорошая элплантация: ASP.NET MVC - несколько кнопок в той же форме

В двух словах:
вы можете проанализировать значение поданной кнопки в действии yout
или
сделайте отдельные действия с вашей версией ActionMethodSelectorAttribute (которую я предпочитаю и предлагаю).

+5
источник

<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();
        }
+3
источник

С 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>
+3
источник

Мы можем иметь это двумя способами:

Либо у вас есть 2 формы в одном представлении и есть 2 метода действий на контроллере, но вам нужно будет предоставить необходимые поля, чтобы форма была помещена в

ex приведен здесь с кодом Несколько форм в виде asp.net mvc с несколькими кнопками отправки

Или

У вас есть две или несколько кнопок отправки: btnSubmit1 и btnSubmit2 и проверьте метод действия, нажав кнопку с помощью кода

if (Request.Form["btnSubmit1"] != null)
{
 //
}
if (Request.Form["btnSubmit2"] != null)
{
 //
}
+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос