2016-12-02 2 views
0

Wenn ich Viewdata in einem Verfahren, das in der Steuerung zugreifen, ich bin in der Lage, den Wert in Form Wörterbuch dh zuzuweisen.Initializing Viewdata-Eigenschaft innerhalb Viewresult Objekt

ViewData["message"]="this is a custom message"; 

aber ich habe in einem Szenario, in dem ich die Ausnahme in MVC zu behandeln versuchte, hier ist mein Code:

public void OnException(ExceptionContext filterContext) 
     { 
      if (!filterContext.ExceptionHandled && (filterContext.Exception is ArgumentOutOfRangeException)) 
      { 
       filterContext.Result = new ViewResult { ViewName = "Error", ViewData = }; 
       filterContext.ExceptionHandled = true; 
      } 
     } 

Nun, wenn die Ausnahmebehandlung i eine Nachricht an den Fehler passieren möchten versucht, auf die Ergebniseigenschaft des ExceptionContext zuzugreifen. Jetzt

meine Frage ist, warum bin ich nicht in der Lage einen Wert an das Viewdata in ein Wörterbuch-like ein Format hier

filterContext.Result = new ViewResult { ViewName = "Error", ViewData = }; 

Dies ist auch ein Viewdatadictionary-Objekt eine Eigenschaft zuweisen Rückkehr , wann kann ich in der Controller-Methode einen Wert wie diesen vergeben ViewData ["message"] = "argument exception error"; Warum kann ich nicht das gleiche innerhalb der ViewResult Objekt.

Antwort

0

Ich habe es selbst ausprobiert und habe Verständnis für die inneren Abläufe des MVC frameWork, bitte korrigieren Sie mich, wenn ich falsch liege und bitte eine Erklärung dafür geben, die mehr über das Framework erfahren würde.

Wenn ich Viewdata in einem Verfahren, das in der Steuerung zugreifen, ich bin den Wert in Form von Wörterbuch zu zuordnen können

Dies, weil, wenn wir den Controller und die Methode aufrufen, MVC nimmt Verantwortlichkeit, Objekte allen Eigenschaften zuzuordnen, deshalb konnten wir den ViewData innerhalb der Methode Werte zuweisen.

filterContext.Result = neues ViewResult {ViewName = "Fehler", ViewData = };

Wenn wir mit dem Viewdata-Eigenschaft der Viewresult-Klasse zu tun haben, wir den Wert nicht zuweisen kann, auf diese Weise Viewdata [ „key“] = „some value“, weil es erfordert Viewdatadictionary Objekt. jedoch können wir dies tun, den Wert wie diese

var d = new ViewDataDictionary(); 
       d["key"] = "some value"; 
       filterContext.Result = new ViewResult { ViewName = "Error",ViewData=d }; 
zuweisen
Verwandte Themen