MVC预览版5 - 将视图呈现为字符串以进行测试
问题描述:
我在Brad Wilson(http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html)上阅读了一篇关于MVC Preview 5的新ViewEngine更改的文章,并认为能够将视图渲染为字符串用于测试。我从文章中得到的印象是可能实现这一目标,但无法弄清楚。MVC预览版5 - 将视图呈现为字符串以进行测试
我相信这可以让我们取消一些我们的WatIn测试(这很慢并且不可靠),因为它可以让我们通过简单地检查期望值/文本的字符串来检查View是否正确显示。
有没有人执行过这样的事情?
答
这很棘手。你必须做的是将Response.Filter属性设置为你实现的自定义流类。 MVC Contrib项目实际上有这样做的例子。我会在那里徘徊。
答
此外测试,它可以用于HTML到PDF转换器等组件。 这些组件通常使用2种转换方式。
- 传递一个URL到转换方法
- 传递一个HTML内容(你可以选择指定的baseUrl解决虚拟路径)
我使用的控制器内的授权滤波器,因此如果我重定向到URL,那么呈现的HTML就是登录页面(我使用自定义验证)。
如果我使用Server.Execute(Url)保留上下文,则该方法失败(HttpUnhandledException:执行/ Template/Pdf/1的子请求时出错。
所以我试图检索呈现的ViewResult的HTML,但我没有成功。
答
我想这里是你需要的。 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();
}