2016-12-02 2 views
0

Когда я обращаюсь к ViewData внутри метода в контроллере, я могу назначить значение в форме словаря, т.е.Инициализация свойства ViewData внутри объекта ViewResult

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

, но я попал в сценарий, где я пытался обработать исключение в MVC, вот мой код:

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

Теперь при обращении исключения я хотел бы передать сообщение об ошибке , поэтому попытался получить доступ к свойству Result объекта ExceptionContext. Теперь

мой вопрос, почему я не в состоянии присвоить значение в ViewData в словарного как формат здесь

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

Это также свойство возвращает ViewDataDictionary объект , когда я могу назначить значение в методе контроллера, например ViewData ["message"] = "ошибка исключения аргумента"; Почему я не могу сделать то же самое внутри объекта ViewResult.

ответ

0

Я попробовал это сам и получил понимание о внутренней работе MVC frameWork, пожалуйста, исправьте меня, если я ошибаюсь, и, пожалуйста, объясните это, чтобы сделать больше о структуре.

Когда доступ ViewData внутри метода в контроллере, я могу присвоить значение в виде словаря

Это происходит потому, что, когда мы называем контроллер и метод, MVC принимает responsibilty для назначения объектов всем свойствам, поэтому мы можем назначить значение для ViewData внутри метода.

filterContext.Result = новый ViewResult {ViewName = "Ошибка", ViewData = };

Когда мы имеем дело со свойством ViewData класса ViewResult, мы не можем присвоить значение, таким образом ViewData [ «ключ»] = «некоторое значение», поскольку он требует ViewDataDictionary объекта. однако мы можем сделать это, чтобы присвоить значение, подобное этому

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