MVC razor formularz z wieloma różnymi przyciskami submit?
Widok Razor ma 3 przyciski wewnątrz formularza. Wszystkie działania przycisku będą wymagały wartości formularza, które są w zasadzie wartościami pochodzącymi z pól wejściowych.
Za każdym razem, gdy klikam którykolwiek z przycisków, Przekierowuję mnie do domyślnej akcji. Czy możesz wskazać, w jaki sposób mogę przesłać formularz do różnych działań w oparciu o naciśnięcie przycisku ?
Naprawdę doceniam twój czas, wskazówki i pomoc.
12 answers
Możesz też spróbować tego:
<input type="submit" name="submitbutton1" value="submit1" />
<input type="submit" name="submitbutton2" value="submit2" />
Następnie w domyślnej funkcji wywołujesz funkcje, które chcesz:
if( Request.Form["submitbutton1"] != null)
{
// Code for function 1
}
else if(Request.Form["submitButton2"] != null )
{
// code for function 2
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-13 15:18:14
To eleganckie rozwiązanie działa dla liczby przycisków submit:
@Html.Begin()
{
// Html code here
<input type="submit" name="command" value="submit1" />
<input type="submit" name="command" value="submit2" />
}
I w metodzie akcji Twoich kontrolerów zaakceptuj ją jako parametr.
public ActionResult Create(Employee model, string command)
{
if(command.Equals("submit1"))
{
// Call action here...
}
else
{
// Call another action here...
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 02:24:56
W widoku
<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>
W akcji
string str =Request.Params["btn1"];
if(str=="ok"){
}
if(str=="cancel"){
}
if(str=="save"){
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-29 08:27:29
Możesz użyć JS + Ajax. Na przykład, jeśli masz jakikolwiek przycisk, możesz powiedzieć, co musi zrobić na click event. Tutaj kod:
<input id="btnFilterData" type="button" value="myBtn">
Tutaj twój przycisk w html: w sekcji skrypt należy użyć tego kodu (sekcja ta powinna znajdować się na końcu dokumentu):
<script type="text/javascript">
$('#btnFilterData').click(function () {
myFunc();
});
</script>
I na koniec należy dodać funkcję ajax (w innej sekcji skryptu, która powinna być umieszczona na początku dokumentu):
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) {
}
});
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-28 01:42:37
Najczystsze rozwiązanie jakie znalazłem jest następujące:
Ten przykład polega na wykonaniu dwóch bardzo Różnych akcji; Podstawowym założeniem jest użycie wartości do przekazania danych do akcji.
Według Ciebie:
@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>
}
}
Wtedy w twoim działaniu:
public ActionResult DliAction(string removeDli, string performDli)
{
if (string.IsNullOrEmpty(performDli))
{
...
}
else if (string.IsNullOrEmpty(removeDli))
{
...
}
return View();
}
Ten kod powinien być łatwy do zmiany, aby uzyskać zmiany wzdłuż motywu, np. zmienić nazwę przycisku na taką samą, wtedy potrzebujesz tylko jednego parametru na akcji itp, co widać poniżej:
W Twoim widok:
@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>
}
Wtedy w twoim działaniu:
public ActionResult DliAction(string weNo)
{
// Process the weNo...
return View();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 10:35:33
Spróbuj zawijać każdy przycisk w jego własnej formie w widoku.
@using (Html.BeginForm("Action1", "Controller"))
{
<input type="submit" value="Button 1" />
}
@using (Html.BeginForm("Action2", "Controller"))
{
<input type="submit" value="Button 2" />
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-29 15:24:25
Można użyć zwykłych przycisków(nie submit). Użyj javascript, aby przepisać (w zdarzeniu "onclick") atrybut "action" formularza do czegoś, co chcesz, a następnie przesłać go. Wygenerowanie przycisku za pomocą własnego helpera (Utwórz plik " Helper.cshtml " w folderze App_Code, w katalogu głównym projektu).
@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"/>
}
A następnie użyj go jako:
@Helpers.SubmitButton("Text for 1st button","ControllerForButton1","ActionForButton1")
@Helpers.SubmitButton("Text for 2nd button","ControllerForButton2","ActionForButton2")
...
W Twoim formularzu.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-28 03:17:19
Najprostszym sposobem jest użycie html5 FormAction
i 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){...}
Istnieje wiele innych sposobów, które możemy wykorzystać, zobacz ten artykuł ASP.Net MVC multiple submit button użyj na różne sposoby
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 15:49:08
Ta odpowiedź pokaże Ci, jak pracować w asp.net z razor, oraz do sterowania wieloma zdarzeniami przycisku submit. Pozwala na przykład mamy dwa przyciski, jeden przycisk przekieruje nas do " PageA.cshtml "i inne przekierują nas do" 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-14 16:28:15
W przypadku, gdy używasz czystej brzytwy, tzn. bez kontrolera MVC:
<button name="SubmitForm" value="Hello">Hello</button>
<button name="SubmitForm" value="World">World</button>
@if (IsPost)
{
<p>@Request.Form["SubmitForm"]</p>
}
Kliknięcie każdego z przycisków spowoduje wyświetlenie "Hello" I "World".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-12 13:33:39
Nie widziano odpowiedzi za pomocą pomocników tagów (Core MVC), więc zaczyna się (dla akcji delete):
W 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>
Na Kontrolerze:
[HttpPost("[action]/{idForDeleteItem}"), ActionName("Delete")]
public async Task<IActionResult> DeleteConfirmed(long idForDeleteItem)
{
///delete with param id goes here
}
Nie zapomnij użyć [Route("[controller]")]
przed deklaracją klasy - on controller.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-27 12:42:42
To mi się udało.
formaction="@Url.Action("Edit")"
Fragment:
<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
}
Może pomóc komuś, kto chce mieć 2 różne metody akcji zamiast jednej metody używającej selektorów lub skryptów klienckich .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 08:21:09