Инициализация свойства 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 };