У меня есть ASP.NET MVC-контроллер с кучей методов действий, возвращающих ViewResult. Теперь, мне нужно, чтобы иметь возможность изменить результат действий на основе определенного параметра URL следующим образом:ASP.NET MVC - изменение результата отображения в OnActionExecuted
- Если параметр не присутствует, просто вернуть
ViewResult
как это - , если параметр присутствует, возьмите
ViewResult
от действий, который был только выполнен, визуализации представления в строку и возвращаетFileStreamResult
, содержащий эту строку (сырой HTML) + некоторая дополнительная информация (не относится к вопросу)
I Я попытался сделать это, переопределив OnActionExecuted
в контроллере:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var viewResult = filterContext.Result as ViewResult;
if (viewResult != null /* && certain URL param present*/)
{
string rawHtml = RenderViewIntoString(viewResult);
filterContext.Result = new FileStreamResult(new MemoryStream(Encoding.UTF8.GetBytes(rawHtml)), "application/octet-stream");
}
}
Но я не могу найти способ реализовать RenderViewIntoString
, потому что по какой-то причине viewResult.View
является null
здесь.
Как я могу визуализировать представление в строке здесь?
почему вы не просто возвращать строку из вашего ActionResult? –
@JordyvanEijk, потому что у меня много действий в контроллере, для которого мне нужно реализовать ту же логику. Я хочу, чтобы все это одним способом. –
Взгляните на [этот вопрос SO] (http://stackoverflow.com/questions/553936/in-mvc-how-do-return-a-string-result) –