Pergunta

Temos um quadro conectável que retorna ActionResult objetos que tornam as coisas a um browser. Uma exigência de ruptura tarde é que os nossos plugins deve ser exigível a partir de um regular aplicação ASP.NET Web Forms.

Até agora eu vim com isso, o que funciona para ActionResults muito básicos:

public class ActionResultTranslator {

    HttpContextBase _context;

    public ActionResultTranslator(HttpContextBase context ) {

        _context = context;
    }

    public void Execute(ActionResult actionResult) {

        ControllerContext fakeContext = new ControllerContext();
        fakeContext.HttpContext = _context;            

        actionResult.ExecuteResult(fakeContext);        
    }
}

Você chamaria o acima de um formulário web com:

protected void Page_Load(object sender, EventArgs e) {
   HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
   var translator = new ActionResultTranslator(contextWrapper);
   translator.Execute(new RedirectResult("http://google.com"));     
}

O que mais eu preciso fazer para gancho de tudo para cima? Por exemplo, se eu queria voltar a ViewResult?

Foi útil?

Solução

Não há também muitas propriedades para falso no ControllerContext.

  • HttpContext - Você tem este coberto
  • Controlador - Tanto quanto eu posso dizer, há ActionResults padrão importo se isso for deixado nulo
  • RequestContext - será preenchida automaticamente se nulo esquerdo
  • RouteData -. Vai ser preenchido com uma coleção vazia se nulo esquerdo

Então, você está apenas esquerda para a preocupação de que o ActionResult poderia depender chaves arbitrárias estando presente em RouteData. A ViewResult deve estar feliz enquanto você preencher action e controller para que ele saiba onde procurar o arquivo de visão. Se você alterar seu código para fornecer uma RouteData com esses valores, você deve estar OK.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top