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
Ответы
Ответ 1
Что мы имеем в наших приложениях:
Атрибут
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
Ответ 2
Вы можете сделать это с помощью 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>
Ответ 3
Если вы работаете в 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>
Ответ 4
Вот хорошая элплантация:
ASP.NET MVC - несколько кнопок в той же форме
В двух словах:
вы можете проанализировать значение поданной кнопки в действии yout
или
сделайте отдельные действия с вашей версией ActionMethodSelectorAttribute
(которую я предпочитаю и предлагаю).
Ответ 5
<input type="submit" value="Create" name="button"/>
<input type="submit" value="Reset" name="button" />
Ответ 6
С 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>
Ответ 7
Мы можем иметь это двумя способами:
Либо у вас есть 2 формы в одном представлении и есть 2 метода действий на контроллере, но вам нужно будет предоставить необходимые поля, чтобы форма была помещена в
ex приведен здесь с кодом Несколько форм в виде asp.net mvc с несколькими кнопками отправки
Или
У вас есть две или несколько кнопок отправки: btnSubmit1 и btnSubmit2 и проверьте метод действия, нажав кнопку с помощью кода
if (Request.Form["btnSubmit1"] != null)
{
//
}
if (Request.Form["btnSubmit2"] != null)
{
//
}