Какой смысл ActionResult возвращают тип?

Вы должны использовать всю систему NotificationCenter.

Проще говоря, вы можете сделать так, чтобы объекты подписывались на значение по умолчанию NotificationCenter и указывали селектор (метод), который будет выполняться при публикации уведомления.

Вы также можете публиковать пользовательские уведомления, которые представляют событие смены обоев.

Я использовал это в приложении, которое построил, чтобы добиться общесистемного перехода в «темный режим».

Для публикации:

@objc func postWallpaperChangeNotification() {
    NotificationCenter.default.post(name: .wallpaperChanged, object: nil)
}

Для подписки:

    NotificationCenter.default.addObserver(self, selector: #selector(someMethodToRunWhenWallpaperChanges(_:)), name: . wallpaperChanged, object: nil)

Также необходимо удалить наблюдателя в deinit() . [+1112]

Это приблизительный код, чтобы дать вам вкус, любые вопросы хму.

15
задан 14 November 2008 в 03:38
поделиться

3 ответа

При возврате ActionResult вместо "просто выполнения вообще ActionResult делает" (т.е. использует Ответ. Перенаправьте непосредственно, или пытающийся представить Представление посредством Ответа OutputStream непосредственно) дает Вам одно действительно хорошее преимущество: Поблочное тестирование действительно легко на этом, тем более, что Вам обычно не нужен веб-сервер к модульному тесту Проекты MVC.

Приложение: Как пример для перенаправления:

Если Вы делаете

return Redirect(newUrl);

в Вашем контроллере Ваш Модульный тест может теперь

  • Проверьте, что возвращаемое значение имеет Тип "RedirectResult"
  • Посмотрите на URL, который перенаправляется к путем проверки результата. URL после кастинга его к RedirectResult
  • Все, не имея необходимость вращать IIS или пробуя к "clevery" прерывают Ответ. Вызов перенаправления
  • В конце дня RedirectResult называет Ответ. Перенаправление в он - функция ExecuteResult, но Ваш Тест Блока контроллера находится перед этим

Приложение 2: И в то время как я нахожусь на нем, вот пример Пользовательского ActionResult:

http://www.stum.de/2008/10/22/permanentredirectresult/

Это должно только показать, что они не "Черная магия". Они на самом деле довольно просты: Ваш Контроллер возвращает Результат Действия, и Время выполнения MVC в конечном счете вызовет функцию ExecuteResult на нем, передающий в ControllerContext, с которым может взаимодействовать Ваш ActionResult. Самое главное снова должно разделить части M-V-C, чтобы сделать Код Допускающим повторное использование, и сделать Поблочное тестирование легче, или короче говоря: дать очень чистую Платформу.

20
ответ дан 1 December 2019 в 03:15
поделиться

Так как это - базовый класс, это позволяет Вам возвращать любой из подклассов ActionResult, таких как ViewResult или JsonResult. Я обычно возвращаю ViewResult как значение по умолчанию, но переопределяю то поведение, если я имею дело с Ajax для возврата объекта JsonResult.

Это позволяет мне добавлять Ajax как прогрессивное улучшение и сохранять приложение, работающее без JavaScript и без потребности в действиях отдельного контроллера.

2
ответ дан 1 December 2019 в 03:15
поделиться

ActionResult является базовым классом для многих различных типов результатов контроллера. Путем возврата базового класса действие контроллера может возвратить различные типы результатов в зависимости от результата метода - ViewResult, RedirectToActionResult, и т.д. ActionResult содержит все данные, необходимые Представлению или новому Действию, которое является результатом текущего действия контроллера.

1
ответ дан 1 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: