Форма бритвы MVC с несколькими различными кнопками отправки?
вид бритвы имеет 3 кнопки внутри формы. Все действия кнопки будут нуждаться в значениях формы, которые в основном являются значениями, поступающими в поля ввода.
каждый раз, когда я нажимаю любую из кнопок, он перенаправляет меня на действие по умолчанию. Можете ли вы указать, как я могу отправить форму на различные действия, основанные на нажатии кнопки ?
Я очень ценю ваше время, руководство и помощь.
12 ответов:
вы также можете попробовать это:
<input type="submit" name="submitbutton1" value="submit1" /> <input type="submit" name="submitbutton2" value="submit2" />затем в функции по умолчанию вы вызываете функции, которые вы хотите:
if( Request.Form["submitbutton1"] != null) { // Code for function 1 } else if(Request.Form["submitButton2"] != null ) { // code for function 2 }
это элегантное решение работает для количество кнопок:
@Html.Begin() { // Html code here <input type="submit" name="command" value="submit1" /> <input type="submit" name="command" value="submit2" /> }и в методе действия ваших контроллеров примите его в качестве параметра.
public ActionResult Create(Employee model, string command) { if(command.Equals("submit1")) { // Call action here... } else { // Call another action here... } }
по мнению
<form action="/Controller_name/action" method="Post> <input type="submit" name="btn1" value="Ok" /> <input type="submit" name="btn1" value="cancel" /> <input type="submit" name="btn1" value="Save" /> </form>в действиях
string str =Request.Params["btn1"]; if(str=="ok"){ } if(str=="cancel"){ } if(str=="save"){ }
вы можете использовать JS + Ajax. Например, если у вас есть какая-либо кнопка, вы можете сказать, что она должна делать при событии click. Вот код:
<input id="btnFilterData" type="button" value="myBtn">вот ваша кнопка в html: в разделе скрипт, вам нужно использовать этот код (этот раздел должен быть в конце документа):
<script type="text/javascript"> $('#btnFilterData').click(function () { myFunc(); }); </script>и, наконец, вам нужно добавить функцию ajax (в другом разделе скрипта, который должен быть размещен в начале документа):
function myFunc() { $.ajax({ type: "GET", contentType: "application/json", url: "/myController/myFuncOnController", data: { //params, which you can pass to yu func }, success: function(result) { error: function (errorData) { } }); };
самое чистое решение, которое я нашел, выглядит следующим образом:
этот пример заключается в выполнении двух очень разных действий; основная предпосылка заключается в использовании значения для передачи данных в действие.
на ваш взгляд:
@using (Html.BeginForm("DliAction", "Dli", FormMethod.Post, new { id = "mainForm" })) { if (isOnDli) { <button name="removeDli" value="@result.WeNo">Remove From DLI</button> } else { <button name="performDli" value="@result.WeNo">Perform DLI</button> } }тогда в вашем действии:
public ActionResult DliAction(string removeDli, string performDli) { if (string.IsNullOrEmpty(performDli)) { ... } else if (string.IsNullOrEmpty(removeDli)) { ... } return View(); }этот код должен быть легко изменить для достижения вариаций по теме, например, изменить название кнопки будет такой же, тогда вам нужен только один параметр на действия и т. д., Как видно ниже:
на ваш взгляд:
@using (Html.BeginForm("DliAction", "Dli", FormMethod.Post, new { id = "mainForm" })) { <button name="weNo" value="@result.WeNo">Process This WeNo</button> <button name="weNo" value="@result.WeNo">Process A Different WeNo This Item</button> }тогда в вашем действии:
public ActionResult DliAction(string weNo) { // Process the weNo... return View(); }
попробуйте обернуть каждую кнопку в свою собственную форму в вашем представлении.
@using (Html.BeginForm("Action1", "Controller")) { <input type="submit" value="Button 1" /> } @using (Html.BeginForm("Action2", "Controller")) { <input type="submit" value="Button 2" /> }
вы можете использовать обычные кнопки (не отправлять). Используйте javascript для перезаписи (при событии "onclick") атрибута "действие" формы на то, что вы хотите, а затем отправьте его. Сгенерируйте кнопку с помощью пользовательского помощника(создайте файл " Helper.cshtml " внутри папки App_Code, в корне вашего проекта).
@helper SubmitButton(string text, string controller,string action) { var uh = new System.Web.Mvc.UrlHelper(Context.Request.RequestContext); string url = @uh.Action(action, controller, null); <input type=button onclick="( function(e) { $(e).parent().attr('action', '@url'); //rewrite action url //create a submit button to be clicked and removed, so that onsubmit is triggered var form = document.getElementById($(e).parent().attr('id')); var button = form.ownerDocument.createElement('input'); button.style.display = 'none'; button.type = 'submit'; form.appendChild(button).click(); form.removeChild(button); } )(this)" value="@text"/> }и затем использовать его как:
@Helpers.SubmitButton("Text for 1st button","ControllerForButton1","ActionForButton1") @Helpers.SubmitButton("Text for 2nd button","ControllerForButton2","ActionForButton2") ...внутри формы.
самый простой способ-использовать HTML5
FormActionиFormMethod<input type="submit" formaction="Save" formmethod="post" value="Save" /> <input type="submit" formaction="SaveForLatter" formmethod="post" value="Save For Latter" /> <input type="submit" formaction="SaveAndPublish" formmethod="post" value="Save And Publish" /> [HttpPost] public ActionResult Save(CustomerViewModel model) {...} [HttpPost] public ActionResult SaveForLatter(CustomerViewModel model){...} [HttpPost] public ActionResult SaveAndPublish(CustomerViewModel model){...}есть много других способов, которые мы можем использовать, см. Эту статью ASP.Net MVC несколько кнопка отправки использовать по-разному
этот ответ покажет вам, как работать в 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>
в случае, если вы используете чистую бритву, т. е. нет контроллера MVC:
<button name="SubmitForm" value="Hello">Hello</button> <button name="SubmitForm" value="World">World</button> @if (IsPost) { <p>@Request.Form["SubmitForm"]</p> }нажатие каждой из кнопок должно отображать Hello и World.
не видел ответа с помощью tag helpers (Core MVC), поэтому здесь он идет (для действия удаления):
на HTML:
<form action="" method="post" role="form"> <table> @for (var i = 0; i < Model.List.Count(); i++) { <tr> <td>@Model.List[i].ItemDescription</td> <td> <input type="submit" value="REMOVE" class="btn btn-xs btn-danger" asp-controller="ControllerName" asp-action="delete" asp-route-idForDeleteItem="@Model.List[i].idForDeleteItem" /> </td> </tr> } </table> </form>На Контроллере:
[HttpPost("[action]/{idForDeleteItem}"), ActionName("Delete")] public async Task<IActionResult> DeleteConfirmed(long idForDeleteItem) { ///delete with param id goes here }не забудьте использовать
[Route("[controller]")]перед объявлением класса-на контроллере.
это то, что работал для меня.
formaction="@Url.Action("Edit")"фрагмент :
<input type="submit" formaction="@Url.Action("Edit")" formmethod="post" value="Save" class="btn btn-primary" /> <input type="submit" formaction="@Url.Action("PartialEdit")" formmethod="post" value="Select Type" class="btn btn-primary" /> [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit( Quote quote) { //code } [HttpPost] [ValidateAntiForgeryToken] public ActionResult PartialEdit(Quote quote) { //code }может помочь кому-то, кто хочет иметь 2 разных метода действий вместо одного метода с помощью селекторов или с помощью клиентских скриптов .
Comments