2010-11-13 3 views
5

Любые идеи по устранению ниже?Реализация TransferResult в MVC 3 RC - не работает

Существует отличная реализация TransferResult here, которая отлично работает на MVC 1,2, но не работает на MVC 3 RC.

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url): base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

На MVC 3 RC, httpHandler.ProcessRequest терпит неудачу и говорит 'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

Как переписать этот код, чтобы сделать эту работу?

UPD: Код работает, если он запущен на встроенном сервере разработки VS 2010, но не работает на локальном хосте IIS 7.5. Проблема все еще не решена.

UPD2 Этот answer contains a modified implementation TransferResult, который работает с MVC3. Оказывается, это еще проще, чем раньше.

+0

вы когда-нибудь исправить эта проблема? –

+1

yep, вот рабочее решение: http://stackoverflow.com/questions/799511/how-to-simulate-server-transfer-in-asp-net-mvc/1242525#1242525 – Andy

ответ

0

Лично я считаю, что создание маршрутов (с ограничениями маршрута, если необходимо) (см. http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx) гораздо предпочтительнее этого «взлома», который пытается выполнить невидимую переадресацию, так что запрос обрабатывается другим контроллером и действием, определяется маршрутизации

Почему вы не можете просто использовать маршрутизацию

+1

Я использую TransferResult для реализации обработки ошибок : текущее действие или представление страницы обрабатываются, и если что-то происходит, выполняется передача. – Andy

1

Невозможно воспроизвести следующие отлично работает в MVC 3 RC (Razor и WebForms):.?.

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url) 
     : base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = HttpContext.Current; 
     httpContext.RewritePath(Url, false); 
     IHttpHandler httpHandler = new MvcHttpHandler(); 
     httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return new TransferResult("/Home/About"); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 
+1

Этот код работает правильно, если используется Visual Studio Devt Server для отладки. Однако при запуске приложения на локальном сервере IIS я испытываю вышеуказанную ошибку. У меня не было возможности проверить приложение на удаленном сервере, но я четко заметил разницу в поведении в этих двух конфигурациях на локальной машине. – Andy

 Смежные вопросы

  • Нет связанных вопросов^_^