MVC Preview 5 - 将视图渲染到字符串以进行测试

Posted

技术标签:

【中文标题】MVC Preview 5 - 将视图渲染到字符串以进行测试【英文标题】:MVC Preview 5 - Rendering A View To String For Testing 【发布时间】:2008-09-22 14:12:18 【问题描述】:

我正在阅读 Brad Wilson (http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html) 关于 MVC Preview 5 的新 ViewEngine 更改的帖子,并认为能够将视图呈现为字符串以供测试使用会很棒。我从文章中得到的印象是,有可能实现这一目标,但不知道如何实现。

我相信这将使我们能够取消我们的一些 WatIn 测试(这些测试缓慢且不可靠),因为它可以让我们通过简单地检查字符串中的预期值/文本来检查视图是否正确呈现。

有没有人实现过类似的东西?

【问题讨论】:

【参考方案1】:

这很棘手。您需要做的是将 Response.Filter 属性设置为您实现的自定义流类。 MVC Contrib 项目实际上有这样做的例子。我会在那里闲逛。

【讨论】:

【参考方案2】:

我认为这就是您所需要的。 RenderPartialToString 函数将控制器作为字符串返回。我从here 得到它。

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();

【讨论】:

【参考方案3】:

此外,它还可以用于 HTML 到 PDF 转换器等组件。 这些组件通常使用两种转换方式。

将 URL 传递给转换方法 传递 HTML 内容(您可以选择指定 baseUrl 来解析虚拟路径)

我在控制器内部使用了一个授权过滤器,所以如果我重定向到 URL,呈现的 HTML 就是登录页面之一(我使用自定义身份验证)。

如果我使用 Server.Execute(Url) 来保留上下文,该方法将失败(HttpUnhandledException: Error execution child request for /Template/Pdf/1.)。

所以我尝试检索呈现的 ViewResult 的 HTML,但没有成功。

【讨论】:

以上是关于MVC Preview 5 - 将视图渲染到字符串以进行测试的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC 中从区域渲染局部视图

ASP MVC Preview 5 和 IIS 6 Windows 身份验证

MVC 视图未加载

Enyo MVC 实现和粒子视图渲染

在 MVC 5 应用程序中检测滚动到局部视图的底部

如何在 Spring MVC 中使用 AJAX 渲染视图