Es gibt drei Möglichkeiten, wie Sie das oben genannte Problem lösen können
- HTML Weg
- Jquery Weg
- Weg "ActionNameSelectorAttribute"
Im Folgenden finden Sie ein Video, in dem alle drei Ansätze demonstrativ zusammengefasst sind.
https://www.facebook.com/shivprasad.koirala/videos/vb.100002224977742/809335512483940
HTML-Weg: -
Auf HTML-Weise müssen wir zwei Formulare erstellen und die Schaltfläche "Senden" in jedem der Formulare platzieren. Und die Aktion jedes Formulars zeigt auf unterschiedliche / entsprechende Aktionen. Sie können den folgenden Code sehen, den das erste Formular an "Aktion1" sendet, und das zweite Formular wird an "Aktion2" gesendet, je nachdem, auf welche Schaltfläche "Senden" geklickt wird.
<form action="Action1" method=post>
<input type=”submit” name=”Submit1”/>
</form>
<form action="Action2" method=post>
<input type=”submit” name=”Submit2”>
</form>
Ajax Weg: -
Wenn Sie ein Ajax-Liebhaber sind, würde Sie diese zweite Option mehr begeistern. Auf Ajax-Weise können wir zwei verschiedene Funktionen "Fun1" und "Fun1" erstellen, siehe den folgenden Code. Diese Funktionen führen Ajax-Aufrufe mithilfe von JQUERY oder einem anderen Framework durch. Jede dieser Funktionen ist mit den "OnClick" -Ereignissen der Schaltfläche "Senden" verknüpft. Jede dieser Funktionen ruft die jeweiligen Aktionsnamen auf.
<Script language="javascript">
function Fun1()
{
$.post(“/Action1”,null,CallBack1);
}
function Fun2()
{
$.post(“/Action2”,null,CallBack2);
}
</Script>
<form action="/Action1" method=post>
<input type=submit name=sub1 onclick=”Fun2()”/>
</form>
<form action="/Action2" method=post>
<input type=submit name=sub2 onclick=”Fun1()”/>
</form>
Verwenden von "ActionNameSelectorAttribute": -
Dies ist eine großartige und saubere Option. Das "ActionNameSelectorAttribute" ist eine einfache Attributklasse, in der wir eine Entscheidungslogik schreiben können, die entscheidet, welche Aktion ausgeführt werden kann.
Als erstes müssen wir in HTML den Senden-Schaltflächen die richtigen Namen geben, um sie auf dem Server zu identifizieren.
Sie können sehen, dass wir den Schaltflächennamen "Speichern" und "Löschen" hinzugefügt haben. Außerdem können Sie in der Aktion feststellen, dass wir gerade den Controller-Namen "Kunde" und nicht einen bestimmten Aktionsnamen eingegeben haben. Wir erwarten, dass der Aktionsname von "ActionNameSelectorAttribute" bestimmt wird.
<form action=”Customer” method=post>
<input type=submit value="Save" name="Save" /> <br />
<input type=submit value="Delete" name="Delete"/>
</form>
Wenn Sie also auf die Schaltfläche "Senden" klicken, wird zuerst das Attribut "ActionNameSelector" aufgerufen, und je nachdem, welche Übermittlung ausgelöst wird, wird die entsprechende Aktion aufgerufen.
Der erste Schritt besteht also darin, eine Klasse zu erstellen, die von der Klasse "ActionNameSelectorAttribute" erbt. In dieser Klasse haben wir eine einfache Eigenschaft "Name" erstellt.
Wir müssen auch die Funktion "IsValidName" überschreiben, die true oder flase zurückgibt. In dieser Funktion schreiben wir die Logik, ob eine Aktion ausgeführt werden muss oder nicht. Wenn diese Funktion also true zurückgibt, wird die Aktion ausgeführt oder nicht.
public class SubmitButtonSelector : ActionNameSelectorAttribute
{
public string Name { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, System.Reflection.MethodInfo methodInfo)
{
// Try to find out if the name exists in the data sent from form
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
}
}
Das Hauptherz der obigen Funktion befindet sich im folgenden Code. Die Sammlung "ValueProvider" enthält alle Daten, die aus dem Formular gebucht wurden. Daher wird zuerst der Wert "Name" nachgeschlagen, und wenn er in der HTTP-Anforderung gefunden wird, wird "true" oder "false" zurückgegeben.
var value = controllerContext.Controller.ValueProvider.GetValue(Name);
if (value != null)
{
return true;
}
return false;
Diese Attributklasse kann dann für die jeweilige Aktion dekoriert und der jeweilige Wert "Name" angegeben werden. Wenn der Submit diese Aktion ausführt und der Name mit dem Namen der HTML-Submit-Schaltfläche übereinstimmt, führt er die Aktion weiter aus oder nicht.
public class CustomerController : Controller
{
[SubmitButtonSelector(Name="Save")]
public ActionResult Save()
{
return Content("Save Called");
}
[SubmitButtonSelector(Name = "Delete")]
public ActionResult Delete()
{
return Content("Delete Called");
}
}