C# 如何将ASP.NET MVC ViewResult呈现为HTML?
在测试环境中,我希望能够使用默认的viewEngine将给定的ViewResult呈现为HTMLC# 如何将ASP.NET MVC ViewResult呈现为HTML?,c#,asp.net-mvc,webforms-view-engine,C#,Asp.net Mvc,Webforms View Engine,在测试环境中,我希望能够使用默认的viewEngine将给定的ViewResult呈现为HTML 目前,我的视图是基于WebForms的。但在某个时候,我可能会有火花或剃刀般的观点。现在,我想把重点放在WebForms上。我可以从测试中呈现我的视图吗 这里有一个方法,可以让您将ViewResult呈现为字符串。在您的上下文中使用它唯一棘手的部分是模拟一个可行的ControllerContext static string RenderPartialViewToString(ControllerC
目前,我的视图是基于WebForms的。但在某个时候,我可能会有火花或剃刀般的观点。现在,我想把重点放在WebForms上。我可以从测试中呈现我的视图吗 这里有一个方法,可以让您将ViewResult呈现为字符串。在您的上下文中使用它唯一棘手的部分是模拟一个可行的ControllerContext
static string RenderPartialViewToString(ControllerContext context, ViewResultBase partialViewResult)
{
Require.ThatArgument(partialViewResult != null);
Require.That(context != null);
using (var sw = new StringWriter())
{
if (string.IsNullOrEmpty(partialViewResult.ViewName))
{
partialViewResult.ViewName = context.RouteData.GetRequiredString("action");
}
ViewEngineResult result = null;
if (partialViewResult.View == null)
{
result = partialViewResult.ViewEngineCollection.FindPartialView(context, partialViewResult.ViewName);
if(result.View == null)
throw new InvalidOperationException(
"Unable to find view. Searched in: " +
string.Join(",", result.SearchedLocations));
partialViewResult.View = result.View;
}
var view = partialViewResult.View;
var viewContext = new ViewContext(context, view, partialViewResult.ViewData,
partialViewResult.TempData, sw);
view.Render(viewContext, sw);
if (result != null)
{
result.ViewEngine.ReleaseView(context, view);
}
return sw.ToString();
}
}
您可能需要考虑基于浏览器的测试。通过这种方式,您可以支持测试AJAX或javascript交互。我还通过Selenium进行了基于浏览器的测试。但我正在尝试测试正在呈现的实际HTML/Javascript。非常有用,谢谢。关于这是如何产生的,有什么博客帖子或其他解释吗?@Jon:我刚才用ILSpy查看了
ViewResultBase.ExecuteSult
的功能,并将其修改为使用StringWriter
而不是请求输出流。(我也必须深入研究PartialViewResult.FindView
,因为这是一个受保护的方法。需要。那语句只是一种简洁的方式,表示如果(!…)抛出…
。