8

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

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

有没有人实施过这样的事情?

4

3 回答 3

5

It's tricky. What you have to do is set the Response.Filter property to a custom stream class that you implement. The MVC Contrib project actually has examples of doing this. I'd poke around in there.

于 2008-09-22T19:25:26.010 回答
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();
}
于 2015-06-24T03:02:55.490 回答
0

此外,它对 HTML 到 PDF 转换器等组件很有用。这些组件通常使用 2 种转换方式。

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

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

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

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

于 2008-11-15T04:10:45.793 回答