Инициализация свойства ViewData внутри объекта ViewResult

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

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, когда я могу назначить значение в методе Controller, например, это ViewData["message"] = "ошибка исключения аргумента"; почему я не могу сделать то же самое внутри объекта ViewResult.

1 ответ

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

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

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

filterContext.Result = new ViewResult {ViewName = "Ошибка", ViewData = };

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

 var d = new ViewDataDictionary();
                d["key"] = "some value";
                filterContext.Result = new ViewResult { ViewName = "Error",ViewData=d };
Другие вопросы по тегам