MVC,如何在控制器中读取呈现的HTML?

时间:2013-11-12 13:24:51

标签: html asp.net-mvc render

也许这是一个奇怪的问题,但想象一下:

//We all know that View is a method...
public ActionResult Something()
{
    return View("index");
}

但是,如果我在此方法之前执行某些统计数据

,该怎么办?
public ActionResult Something()
{
    return PerformStats(View("index"));
}

我将有一个像这样的私人方法:

private ActionResult PerformStats(ViewResult viewResult)
{

    //THIS IS WHAT I WANT TO ACCHIEVE:
    //*********************************

    var contentSent = viewResult.InnerHtml.Lengh; <<-- I wish!

    return viewResult;
}

后者,我想做的是保存发送给客户端的大量内容。 如果它是html的确切数量并不重要,即使我得到了json的.count()它也可以做到这一点。

有没有办法知道控制器上的渲染内容?

谢谢!

1 个答案:

答案 0 :(得分:1)

OnActionExecuting:在执行操作方法之前调用。你可以把统计相关的逻辑放在那里。

http://msdn.microsoft.com/en-us/library/system.web.mvc.iactionfilter.onactionexecuting(v=vs.98).aspx

OnActionExecuted:在执行操作方法后调用。

http://msdn.microsoft.com/en-us/library/system.web.mvc.iactionfilter.onactionexecuted(v=vs.98).aspx

在这些方法中,您可以访问ActionExecutingActionExecutedContext

如果你想获得渲染HTML(部分或完整视图)的大小,那么你可能需要:

  • 找到您要呈现的视图
  • 将其存储在字符串构建器
  • 获取长度

有一个问题解释了如何在操作方法中将视图呈现为字符串:In MVC3 Razor, how do I get the html of a rendered view inside an action?