2012-02-01 18 views
10

Właśnie zacząłem używać MVC4, a pierwsza metoda działania, na którą patrzę, ma coś nowego. Sprawdziłem w Internecie i nie mogę znaleźć nic na ten temat:MVC4 - ContextDependentView - co to znaczy?

public ActionResult LogOn() 
     { 
      return ContextDependentView(); 
     } 

Czy ktoś wie, co ContextDependentView jest?

Coś nowego dla mnie.

Odpowiedz

11

Jego celem jest ułatwienie działania wyniku View lub PartialView dla działań Login i Register.

private ActionResult ContextDependentView() 
    { 
     string actionName = ControllerContext.RouteData.GetRequiredString("action"); 
     if (Request.QueryString["content"] != null) 
     { 
      ViewBag.FormAction = "Json" + actionName; 
      return PartialView(); 
     } 
     else 
     { 
      ViewBag.FormAction = actionName; 
      return View(); 
     } 
    } 

Podobnie jak inne rzeczy w MVC jest dokonywane przez Konwencję ... Konwencja o to, kiedy Request.QueryString zawiera ?content=xxxx, to poprzedza „json” do nazwy działania, szczeliwo to właściwość ViewBag i zwraca częściowego wersja widoku. Na przykład:

Wniosek o /Account/Login?content=test zostanie rozpatrzony pod numerem ViewBag.FormAction = "JsonLogin";, a następnie zwróci część.

Żądanie /Account/Login ma zawartość ciąg kwerendy więc jego działanie forma pozostaje ViewBag.FormAction = "Login";

+0

Dziękuję bardzo za wyjaśnienie. –

+1

Czy uważasz, że to naprawdę powinna być prywatna metoda w tym kontrolerze? Wydaje mi się, że jest to coś, co można wykorzystać do każdego kontrolera. Czy sam użyłeś tej metody i pozostawiłeś ją jako prywatną? –

+0

Szczerze mówiąc, zacząłem grać tylko z MVC4. Założę się, że ta metoda zmieni się, zanim przejdzie do produkcji. Możesz też przenieść to do swojej własnej klasy "BaseController: Controller", jeśli chcesz lub możesz jej użyć. Sztuczka polegająca na umieszczeniu go w prywatnym lub statycznym kontrolerze bazowym wydaje się, że zobowiązuje Cię do tworzenia widoków zarówno dla częściowych, jak i kompletnych scenariuszy. Pozostawiłbym go takim, jaki jest, i eksperymentuję z jego funkcją i sprawdzam, gdzie się znajduje w Release Candidate (RC). –