MVC预览5 - 将视图呈现为字符串进行测试

8
我正在阅读Brad Wilson的文章(http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html),关于MVC Preview 5中的新ViewEngine更改,我认为能够将视图渲染成字符串以供测试使用将是很棒的。从文章中的印象来看,可能可以实现这一点,但我无法弄清楚如何实现。
我相信这将使我们不再需要一些WatIn测试(它们速度慢且不可靠),因为它将允许我们通过简单检查字符串中的预期值/文本来检查视图是否已正确呈现。
有人实现过类似这样的东西吗?
3个回答

5

这有点复杂。你需要将Response.Filter属性设置为自己实现的自定义流类。MVC Contrib项目实际上有这样的示例。我建议在那里查找一下。


1
我认为这是您所需要的。 RenderPartialToString 函数将控制器作为字符串返回。我从这里获取它。
public static string RenderPartialToString(string controlName, object viewData)
{
     ViewDataDictionary vd = new ViewDataDictionary(viewData);
     ViewPage vp = new ViewPage { ViewData = vd };
     Control control = vp.LoadControl(controlName);

     vp.Controls.Add(control);

     StringBuilder sb = new StringBuilder();
     using (StringWriter sw = new StringWriter(sb))
     {
         using (HtmlTextWriter tw = new HtmlTextWriter(sw))
         {
             vp.RenderControl(tw);
         }
     }

     return sb.ToString();
}

0
此外,除了测试之外,它还可以用于像HTML到PDF转换器这样的组件。这些组件通常使用两种转换方式。
  • 将URL传递给转换方法
  • 传递HTML内容(您可以选择指定baseUrl以解析虚拟路径)
我在控制器中使用Authorize过滤器,因此如果我重定向到URL,则呈现的HTML是登录页面(我使用自定义身份验证)。
如果我使用Server.Execute(Url)来保持上下文,则该方法会失败(HttpUnhandledException:执行/Template/Pdf/1/的子请求时出错)。
因此,我尝试检索呈现的ViewResult的HTML,但我没有成功。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接