2013-02-09 6 views
9

w Asp.Net MVC, jeśli udekoruję metodę działania o atrybucie NonAction, wówczas użytkownik nie będzie mógł go wywołać przez użytkownika odwiedzającego witrynę. to samo dzieje się, gdy robię private

. Jaka jest różnica między tymi dwoma elementami i czy istnieje specjalny cel, dla którego utworzono atrybut NonAction?Różnica między metodami prywatnymi a operacjami dekorowanymi przy użyciu NonAction w Asp.Net MVC

Na przykład Jaka jest różnica między

[NonAction] 
public ActionResult SomeAction(){} 

I

private ActionResult SomeAction(){} 

w kontekście asp.net MVC oczywiście znam jeden jest public a drugi jest private

Odpowiedz

8

To jedyna różnica. Atrybut ten jest używany, gdy chcesz mieć metodę, która ma podpis, który uczyniłby z niej akcję, ale nie chcesz być akcją.

Przykładem wyrażeniem, że jest to metoda, że ​​metody działania zadzwonić do wytworzenia ActionResult do nich:

[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"); 
} 

Powodem były upubliczniane, a nie prywatny będzie tak, że działania w innych regulatorów może również go używaj.

+0

W jaki sposób inni administratorzy mogą używać metody "public" oznaczonej jako "NonAction"? – mipe34

+3

@ mipe34: Tworząc instancję kontrolera i wywołując metodę. – Guffa

0

Oba działa tak samo w metodzie działania, można ich używać osobno lub łącznie.

[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); 
     } 

Jeśli zadeklarować je jak powyższy kod, a następnie, gdy będziemy próbować, aby przejść do szczegółów sposobu działania to nie pójdzie do it.Rather pokaże błąd.

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

To pokazuje, że nasze szczegółowe łącze w widoku zawiera wszelkie odniesienia do metody działania detali i naszego kontrolera.

+1

dlaczego warto używać wielkich liter? – manetsus

+0

odpowiedź 404 jest powszechna. Przy jednym z nich LUB obydwu razem otrzymacie taką samą odpowiedź. Co próbujesz wskazać? –