Самый Корректный способ перенаправить страницу с Шаблоном Образцового Предъявителя Представления

Что лучший способ состоит в том, чтобы назвать a Response.Redirect в шаблоне Образцового Предъявителя Представления при соблюдении для исправления разделения уровня?

5
задан G-Wiz 15 January 2010 в 20:12
поделиться

4 ответа

Один из способов, которым я обрабатывал, это для презентабели поднять событие (вроде успешно или что-то), чтобы представление подписалась на. Когда ведущий закончил свою обработку, он будет поднять событие, которое будет обрабатываться по мнению. В этом обработке представление будет перенаправлять на следующую страницу.

Таким образом, ведущий не нужно ничего знать о страницах или URL или что-то. Он просто знает, когда он завершил свою задачу и дает представлению знать, поднимая событие. Вы можете поднять разные события, если презентатер успел или потерпел неудачу, если вам нужно перенаправить в разные места.

6
ответ дан 13 December 2019 в 05:35
поделиться

Как мы делаем, это хорошо работает, как только некоторые наземные работы заложены. Я уверен, что есть несколько способов кожи кота, хотя. (Кто все равно скинки кошек. Кошки милые и приятные!)

Во-первых, это будет работать только на ASP.NET Compabled веб-проектам, а не на веб-сайтах.

Каждая страница должна наследовать от пользовательского абстрактного базового класса, который выглядит что-то подобное:

public abstract class PageBase : Page
{
  private static string _baseUrl = "/";

  public static string BaseUrl
  {
    get { return _baseUrl; }
    set { _baseUrl = value; }
  }

  protected static string BuildUrl(string basePath)
  {
    if( !string.IsNullOrEmpty(basePath) && basePath.StartsWith("~/"))
    {
      basePath = basePath.replace("~/", BaseUrl);
    }
    return basePath;
  }

  protected static string LoadView(string path)
  {
    Response.Redirect(path);
  }
}

Каждая страница также реализует интерфейс специфичного страниц. Каждый конкретный интерфейс страницы также наследует из базового интерфейса:

public interface IPageBase()
{
  void LoadView(string path);
}

, то это вопрос каждой страницы, определяющей свою собственную версию BaseURL. Возможно, вы захотите объяснить запросы / шифрование PATH / ETC.

Наконец, любая из ваших докладчиков (которые должны ссылаться на определенные интерфейсы на странице), могут захватить статическое buildurl () на нужную страницу для просмотра, а затем вызовов loadview () с возвращенным путем.

1
ответ дан 13 December 2019 в 05:35
поделиться

Это зависит от того, насколько общие ваши ведущие. Если ваши ведущие являются полностью UI Agnostic (могут быть повторно использованы между WinForms и WebForms), то вам придется абстрактные операции по перенаправлению. В веб-формах операция по перенаправлению будет реализована с помощью ответа. В WinForms (я отказываюсь от многих опытов с WinForms), я предполагаю, что он будет реализован по мере того, как uverform.show.

Один простой, внеупонечный вариант My-Head будет включать в интерфейс View A ShowViewx (). Вы можете иметь один для каждой формы, представление может логически перенаправить. В качестве альтернативы, представление может реализовать метод интерфейса, такого как Show (ondingViews), где ondingViews - это enum, который включает в себя значение для каждой из представлений, которые могут быть «перенаправлены» с определенного представления. Этот Enum будет жить на уровне докладчика.

Вышеуказанные подходы специфичны для просмотра - презентаторы. Вместо этого вы могли бы реализовать его как системную массу. Логика будет аналогична выше, реализована в базовом представлении и ведущей. Там будет ShowView __ () для каждой формы, или в Show (Views) метод, где представления - это enum всех форм.

Это подбрасывание между инкапсуляцией и сухой.

1
ответ дан 13 December 2019 в 05:35
поделиться

Я не знаю, является ли это самым правильным способом, концептуально. Но то, что я сделал в своих последних MVP-приложениях, это создал обертку вокруг HttpContext.current, которую я назвал HttpRedirector. Я также создал фиктивный редиректор для тестовых целей. Оба они отслеживают последний перенаправленный url, чтобы я мог проверить в своих юнит-тестах, что перенаправление на самом деле произошло, когда я вызываю метод на своем контроллере/представителе. С помощью IOC-контейнера я могу переключить реализацию IRedirector на основе среды (производство/тестирование).

4
ответ дан 13 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

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