2013-02-09 2 views
9

in Asp.Net MVC Wenn ich eine Aktionsmethode mit Attribut NonAction dekorieren dann ist es nicht erlaubt, durch den Benutzer aufgerufen werden, die Website zu besuchen. Gleiches passiert, wenn ich es mache private

Also was ist der Unterschied zwischen den beiden und gibt es einen speziellen Zweck, für den NonAction Attribut wurde gemacht?Unterschied zwischen privaten Methoden und Aktionen dekoriert mit NonAction in Asp.Net MVC

Zum Beispiel, was ist der Unterschied zwischen

[NonAction] 
public ActionResult SomeAction(){} 

Und

private ActionResult SomeAction(){} 

im Zusammenhang mit asp.net MVC ich weiß natürlich ist public und das andere ist private

Antwort

8

Das ist der einzige Unterschied. Das Attribut wird verwendet, wenn Sie eine Methode mit einer Signatur möchten, die sie zu einer Aktion macht, die jedoch keine Aktion sein soll.

Ein Beispiel für eine Verwendung dafür ist eine Methode, die Aktion Methoden, um die ActionResult für sie zu produzieren nennen:

[NonAction] 
public JsonResult JsonInfo(string id, string value) { 
    return Json(new { id = id, value = value }); 
} 

public JsonResult GetBusInfo() { 
    return JsonInfo("4", "Bus"); 
} 

public JsonResult GetCarInfo() { 
    return JsonInfo("8", "Car"); 
} 

Der Grund ist es anstelle der privaten öffentlich zu machen wäre, so dass die Maßnahmen in anderen Controllern konnte benutze es auch.

+0

Wie können andere Controller die öffentliche Methode verwenden, die als "NonAction" gekennzeichnet ist? – mipe34

+3

@ mipe34: Durch Erstellen einer Instanz des Controllers und Aufruf der Methode. – Guffa

0

Beide funktionieren gleich mit Aktionsmethode, Sie können sie separat oder zusammen verwenden.

[NonAction]   
     private ActionResult Details(int? id) 
     { 
      if (id == null) 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
      } 
      FEED_TBL fEED_TBL = db.FEED_TBL.Find(id); 
      if (fEED_TBL == null) 
      { 
       return HttpNotFound(); 
      } 
      return View(fEED_TBL); 
     } 

Wenn es wie der obige Code erklärt dann, wenn wir zu den Details Aktionsmethode zu gehen versuchen, es nicht it.Rather gehen wird den Fehler zeigen.

{{ HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.}} 

Dies zeigt, dass unsere Detailverknüpfung in der Ansicht keinen Hinweis auf Details Aktionsmethode und unseren Controller gefunden hat.

+1

Warum Großschreibung? – manetsus

+0

eine Antwort von 404 ist üblich. Mit jedem von ihnen ODER beide zusammen würden Sie die gleiche Antwort bekommen. Worauf willst du hinweisen? –

Verwandte Themen