Asp.net mvc 3 获取MVC3中视图呈现的HTML

Asp.net mvc 3 获取MVC3中视图呈现的HTML,asp.net-mvc-3,testing,Asp.net Mvc 3,Testing,在我的MVC3应用程序中,我通过创建一个新的控制器和调用诸如Index()之类的方法来测试东西,并将生成的ViewResult存储到一个名为result的变量中 如何戳这个对象(或其他对象)以将实际的HTML返回到浏览器 我很惊讶result.ViewName为空,result.Model为空,result.View为空,甚至result.TempData为空。(result.ViewBag中有我放在ViewBag中的东西,所以我知道整个堆栈工作正常。) 如果有必要的话,我将使用VisualSt

在我的MVC3应用程序中,我通过创建一个新的控制器和调用诸如
Index()
之类的方法来测试东西,并将生成的
ViewResult
存储到一个名为
result
的变量中

如何戳这个对象(或其他对象)以将实际的HTML返回到浏览器

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

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

注意事项:
1.如果只写return View(),则ViewName为空;并且不要明确地写视图名称。
2.TempData是控制器的属性,因此适用于ViewBag。看


更新:顺便说一句,mvc中有一个奇妙的测试库

这是我用来创建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();
    }
}

我觉得你想得太多了您不需要测试HTML的内容,更多的是由控制器传递给视图的
模型的内容。HTML的测试应该是可视化的(例如查看网页)@RPM1984我想测试我的模型中的一些东西;例如正在使用哪个CSS文件夹(有很多可能)。重复,尽管这些解决方案都不适用于meI,但我得到了一个空的ViewContext。