【问题标题】:MVC Preview 5 - Rendering A View To String For TestingMVC Preview 5 - 将视图渲染到字符串以进行测试
【发布时间】:2008-09-22 14:12:18
【问题描述】:
【问题讨论】:
标签:
asp.net-mvc
testing
view
rendering
【解决方案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,但没有成功。