在我的MVC3应用程序中,我通过创建新控制器并调用Index()
等方法并将生成的ViewResult
存储到名为result
的变量中来测试内容。
我如何戳这个对象(或其他东西)来获取返回浏览器的实际HTML?
我很惊讶result.ViewName
为空,result.Model
为空,result.View
为空,甚至result.TempData
为空。 (result.ViewBag
有我放在viewbag中的东西,所以我知道整个堆栈工作正常。)
如果重要的话,我正在使用Visual Studio测试,以及NHibernate / ActiveRecord用于我的堆栈。但所有这些都在我的测试项目中正确初始化。 (我可以从实体/对象获取数据。)
答案 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();
}
}