获取MVC3中的视图呈现的HTML

时间:2011-11-16 21:10:19

标签: asp.net-mvc-3 testing

在我的MVC3应用程序中,我通过创建新控制器并调用Index()等方法并将生成的ViewResult存储到名为result的变量中来测试内容。

我如何戳这个对象(或其他东西)来获取返回浏览器的实际HTML?

我很惊讶result.ViewName为空,result.Model为空,result.View为空,甚至result.TempData为空。 (result.ViewBag有我放在viewbag中的东西,所以我知道整个堆栈工作正常。)

如果重要的话,我正在使用Visual Studio测试,以及NHibernate / ActiveRecord用于我的堆栈。但所有这些都在我的测试项目中正确初始化。 (我可以从实体/对象获取数据。)

2 个答案:

答案 0 :(得分:0)

需要注意的事项:
1.如果只写回返View(),则ViewName为空;并且不要写视图名称明确。
2. TempData是控制器的属性,对于ViewBag。见MSDN

更新:顺便提一下,有一个很棒的库可以在mvc中进行测试MvcContrib

答案 1 :(得分:0)

这是我用来创建HTML电子邮件的东西,但也可以在你的情况下使用,将视图结果的HTML输出到字符串中。

public static string RenderViewToString(Controller controller, string viewName, object model)
{
    controller.ViewData.Model = model;
    try
    {
        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, null);
            ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View);

            return sw.ToString();
        }
    }
    catch (Exception ex)
    {
        return ex.ToString();
    }
}