it-swarm.com.de

MVC-Rasiermesser-Formular mit mehreren verschiedenen Senden-Schaltflächen?

Eine Rasiermesseransicht enthält 3 Schaltflächen in einem Formular. Alle Aktionen der Schaltflächen erfordern Formularwerte, bei denen es sich grundsätzlich um Werte handelt, die in Eingabefelder eingegeben werden.

Jedes Mal, wenn ich auf eine der Schaltflächen klicke, wurde ich zur Standardaktion umgeleitet. Können Sie mir bitte zeigen, wie ich ein Formular zu verschiedenen Aktionen senden kann, die auf Tastendruck basieren?

Ich schätze Ihre Zeit, Anleitung und Hilfe sehr.

52
Toubi

Sie könnten dies auch versuchen:

<input type="submit" name="submitbutton1" value="submit1" />
<input type="submit" name="submitbutton2" value="submit2" />

Dann rufen Sie in Ihrer Standardfunktion die gewünschten Funktionen auf:

if( Request.Form["submitbutton1"] != null)
{
    // Code for function 1
}
else if(Request.Form["submitButton2"] != null )
{
    // code for function 2
}
82

Diese elegante Lösung funktioniert für die Anzahl der Senden-Schaltflächen:

@Html.Begin()
{
  // Html code here
  <input type="submit" name="command" value="submit1" />
  <input type="submit" name="command" value="submit2" />

}

Und in der Aktionsmethode Ihrer Controller akzeptieren Sie es als Parameter.

public ActionResult Create(Employee model, string command)
{
    if(command.Equals("submit1"))
    {
      // Call action here...
    }
    else
    {
      // Call another action here...
    }
}
63
Priyank Sheth

in der Ansicht

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

in der Aktion 

string str =Request.Params["btn1"];
if(str=="ok"){


}
if(str=="cancel"){


}
if(str=="save"){


}
15
Lamloumi Afif

Sie können JS + Ajax ..__ verwenden. Wenn Sie beispielsweise über eine Schaltfläche verfügen, können Sie sagen, was bei Klickereignis ..__ zu tun ist. Hier der Code:

 <input id="btnFilterData" type="button" value="myBtn">

Hier Ihre Schaltfläche in html: Im Skriptabschnitt müssen Sie diesen Code verwenden (Dieser Abschnitt sollte sich am Ende des Dokuments befinden):

<script type="text/javascript">
$('#btnFilterData').click(function () {
    myFunc();
});
</script>

Und zum Schluss müssen Sie noch eine Ajax-Funktion hinzufügen (In einem anderen Skriptabschnitt, der am Anfang des Dokuments stehen sollte):

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

        }
    });
};
10
Arthur

Die sauberste Lösung, die ich gefunden habe, lautet wie folgt:

In diesem Beispiel werden zwei sehr unterschiedliche Aktionen ausgeführt. Die Grundvoraussetzung besteht darin, den Wert zu verwenden, um Daten an die Aktion zu übergeben.

Ihrer Ansicht nach:

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

Dann in deiner Aktion:

    public ActionResult DliAction(string removeDli, string performDli)
    {
        if (string.IsNullOrEmpty(performDli))
        {
            ...
        }
        else if (string.IsNullOrEmpty(removeDli))
        {
            ...
        }

        return View();
    }

Dieser Code sollte leicht zu ändern sein, um Variationen entlang des Themas zu erreichen, z. Ändern Sie den Namen der Schaltfläche auf den gleichen Wert. Dann benötigen Sie nur einen Parameter für die Aktion usw., wie unten gezeigt:

Ihrer Ansicht nach:

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

Dann in deiner Aktion:

    public ActionResult DliAction(string weNo)
    {
        // Process the weNo...

        return View();
    }
4
Paul Zahra

Versuchen Sie, jede Schaltfläche in Ihrer Ansicht in ein eigenes Formular einzuwickeln.

  @using (Html.BeginForm("Action1", "Controller"))
  {
    <input type="submit" value="Button 1" />
  }

  @using (Html.BeginForm("Action2", "Controller"))
  {
    <input type="submit" value="Button 2" />
  }
3
TK-421

Sie können normale Schaltflächen verwenden (nicht senden). Verwenden Sie Javascript, um (bei einem "Klick" -Ereignis) das "action" -Attribut des Formulars in etwas zu ändern, das Sie möchten, und senden Sie es dann ab. Generieren Sie die Schaltfläche mit einem benutzerdefinierten Helfer (erstellen Sie eine Datei "Helper.cshtml" im Ordner App_Code im Stammverzeichnis Ihres Projekts).

@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"/>
}

Und dann verwenden Sie es als:

@Helpers.SubmitButton("Text for 1st button","ControllerForButton1","ActionForButton1")
@Helpers.SubmitButton("Text for 2nd button","ControllerForButton2","ActionForButton2")
...

In deinem Formular.

3
galmeida

Am einfachsten ist es, die html5 FormAction und FormMethod zu verwenden.

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

Es gibt viele andere Möglichkeiten, die wir verwenden können. Weitere Informationen hierzu finden Sie in diesem Artikel ASP.Net MVC - Mehrfacheinreichungsschaltfläche auf unterschiedliche Weise verwenden

1
Ali Adravi

Das hat bei mir funktioniert. 

formaction="@Url.Action("Edit")"

Ausschnitt: 

 <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
        }

Könnte jemandem helfen, der zwei verschiedene Aktionsmethoden anstelle von einer Methode mit Selektoren oder mit Client-Skripts verwenden möchte.

0
user2695433

Falls Sie einen reinen Rasierer verwenden, d. H. Keinen MVC-Controller: 

<button name="SubmitForm" value="Hello">Hello</button>
<button name="SubmitForm" value="World">World</button>
@if (IsPost)
{
    <p>@Request.Form["SubmitForm"]</p>
}

Wenn Sie auf die Schaltflächen klicken, werden Hello und World angezeigt. 

0
Jacques

Ich habe keine Antwort mit Hilfe von Tag-Helfern (Core-MVC) gesehen, daher hier (für eine Löschaktion):

In 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>

Auf Controller:

[HttpPost("[action]/{idForDeleteItem}"), ActionName("Delete")]
public async Task<IActionResult> DeleteConfirmed(long idForDeleteItem)
{
    ///delete with param id goes here
}

Vergessen Sie nicht, [Route("[controller]")] VOR der Klassendeklaration zu verwenden.

0
Pablo

Diese Antwort zeigt Ihnen, wie Sie in asp.net mit dem Rasierer arbeiten und mehrere Schaltflächenereignisse steuern. Zum Beispiel haben wir zwei Schaltflächen, eine Schaltfläche leitet uns zu "PageA.cshtml" um und die andere wird uns zu "PageB.cshtml" umleiten.

@{
  if (IsPost)
    {
       if(Request["btn"].Equals("button_A"))
        {
          Response.Redirect("PageA.cshtml");
        }
      if(Request[&quot;btn"].Equals("button_B"))
        {
          Response.Redirect(&quot;PageB.cshtml&quot;);
        }
  }
}
<form method="post">
   <input type="submit" value="button_A" name="btn"/>;
   <input type="submit" value="button_B" name="btn"/>;          
</form>

0
Pir Fahim Shah