Como usar Resultados MVC ação de formulários web regulares (fingindo ControllerContext)?
-
06-07-2019 - |
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?
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 ??strong> -. 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.