Frage

Kann mir bitte jemand sagen, warum ich NonAction verwenden soll?Ich meine, ich habe ein Formular mit mehreren Übermittlungswerten: Aktualisieren, Löschen oder Einfügen.Da alle Submit-Buttons dieselbe Form haben, schalte ich den Submit-Wert im Controller um und verhalte mich entsprechend.

So:

public ActionResult asd(string submitButton){
     switch(submitButton){
         case "Insert":
             return Insert();
         // bla bla bla
     }
}

[NonAction]
public ActionResult Insert(){
    // some code inside here
    return View();
}

Noch einmal, warum sollte ich NonAction anstelle von so etwas verwenden:

public void Insert(){
    // some code inside here
}

Andere Tipps

Es ist erwähnenswert, dass die Notwendigkeit, [NonAction] zu verwenden, nur für öffentliche Methoden gilt.Geschützte und private Methoden werden nicht als Aktionen behandelt.Da Ihre Methoden Update / Delete / Insert Helfer für asd() sind, ist eine private Methode für Ihr Szenario besser geeignet:

public ActionResult asd(string submitButton){
    switch(submitButton){
        case "Insert":
            return Insert();
        // bla bla bla
    }
}

ActionResult Insert(){
    // some code inside here
}

Wenn Sie das Attribut [NonAction] nicht verwenden, kann jemand Ihre Aktion direkt aufrufen, anstatt die Funktion 'asd' ausführen zu müssen

Lesen von Haacks Artikel

Jede öffentliche Methode in einer Controller-Klasse kann über eine URL aufgerufen werden.

Manchmal müssen Sie dies vermeiden.Wenn Sie beispielsweise eine Schnittstelle implementieren und diese öffentliche Methode möglicherweise nicht aufrufen möchten, können Sie sie als NonAction markieren

public interface IEmployee
{
 void Save(Employee e);
 bool Validate(Employee e);
}

public class EmployeeController:Controller, IEmployee
{
  public void Save(Employee e){
  }

  [NonAction]
  public void Validate(Employee e){
  }
}

Ich habe gerade [NonAction] in unserer Web-API verwendet, um eine Reihe von Controller-Methoden (Endpunkten) zu dekorieren, da wir in letzter Minute entschieden hatten, die Lieferung der spezifischen Endpunkte zu verschieben.

Es ist also nützlich, wenn Sie vermeiden möchten, einen API-Endpunkt verfügbar zu machen, die Implementierung jedoch für später behalten möchten.

Also habe ich dieses Attribut verwendet und es hat mir viel Zeit gespart.

Ich werde es einfach in der nächsten Version entfernen und dies wird einfach da sein!

Nicht-Attribut ergibt eine Aktion, die von der Navigationsleiste nicht erreichbar ist.Wenn Sie beispielsweise eine Aktion haben, die Elemente in der Datenbank löscht, müssen Sie das Attribut NonAction hinzufügen, um es nicht von den Benutzern erreichbar zu machen.

Stellen Sie sich ein ActionResult zunächst einfach als einen bestimmten Konstrukttyp vor, der von MVC zurückgegeben wird. Dies bietet einen besonderen Komfort hinsichtlich der Art und Weise, wie ActionResult intern innerhalb des MVC-Frameworks behandelt werden kann.Die Tatsache, dass etwas ein ActionResult ist, bedeutet also nicht unbedingt " dies sollte öffentlich verfügbar sein ".Tatsächlich wird jede öffentliche Methode in einem MVC-Controller als Aktionsmethode behandelt, unabhängig davon, ob sie ein ActionResult zurückgibt.

Wenn Sie also einfach einen Rückgabetyp haben, der kein ActionResult ist, wird nicht unbedingt verhindert, dass diese Methode als öffentlich verfügbare Aktion angezeigt wird, die über a aufgerufen werden kannURL.

Es kann viele Gründe geben, warum Sie eine Methode nicht als Aktion verfügbar machen möchten, die über eine URL aufgerufen werden kann. Wenn Sie sich dagegen schützen möchten, verwenden Sie die [NonAction].] Attribut.

Dies zeigt an, dass eine Controller-Methode keine Aktionsmethode ist. Beispiel: [NonAction] public void IndexTest () {// Etwas tun} Dies ist ein sehr nützliches Attribut, wenn die Sichtbarkeit der Controller-Methode nicht in privat geändert werden kann.

Es ist ein Attribut, das für die Methoden verwendet wird, die durch Modifikatoren für den öffentlichen Zugriff definiert werden.Eigentlich behandelt MVC Framework alle öffentlichen Methoden als URLs. Wenn Sie dies jedoch nicht möchten, müssen Sie eine Methode mit dem Attribut non action dekorieren.Dasselbe kann erreicht werden, indem die Methode privat gemacht wird.

Ein Beispiel für ein NonAction-Attribut finden Sie unten. http://yogeshdotnet.com/non-action-attribute-in-mvc/

Wenn Sie einige Aktionsmethoden nicht aufrufen möchten, müssen Sie sie mit einem Attribut [NonAction] markieren oder privat machen

public ActionResult Index(){
    return View();
}

[NonAction]
public ActionResult Countries(List<string>countries){
    return View(countries);
}

Sie können den Code kopieren und einfügen und das Ergebnis sehen. Danke

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top