【发布时间】:2014-11-08 19:59:52
【问题描述】:
ASP.NET MVC4 Web API 控制器应在 json 结果属性中以 html 形式返回 Razor 视图。
我试过控制器
public class TestController : ApiController
{
public HttpResponseMessage Get()
{
var body = RenderViewToString<object>("~/Views/Broneeri/Schedule.cshtml", new object() );
return Request.CreateResponse(HttpStatusCode.OK, new { content = body } );
}
string RenderViewToString<T>(string viewName, T model)
{
ViewDataDictionary ViewData = new ViewDataDictionary(model);
TempDataDictionary TempData = new TempDataDictionary();
ControllerContext controllerContext = new System.Web.Mvc.ControllerContext();
controllerContext.RouteData = new RouteData();
controllerContext.RouteData.Values.Add("controller", "Schedule");
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
var viewContext = new ViewContext(controllerContext, viewResult.View, ViewData,
TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
}
但我遇到了一个奇怪的异常
System.NotImplementedException was unhandled by user code
HResult=-2147467263
Message=The method or operation is not implemented.
Source=System.Web
StackTrace:
at System.Web.HttpContextBase.get_Items()
at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations)
at System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView(ControllerContext controllerContext, String partialViewName, Boolean useCache)
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths)
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 cacheLocator, Func`2 locator)
...
一行
var viewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
如何从 ASP.NET 4 Web API 控制器的视图中返回 HTML 内容?
【问题讨论】:
-
WebAPI 用于 REST 风格的操作。如果要返回 HTML,为什么不使用普通的控制器操作和局部视图?
-
WebAPI 方法返回 json 数据。此数据的一个属性包含响应数据 html 格式。此内容作为 html 添加到页面中,以避免整个页面刷新。因此我需要从 WebAPI 生成 html
-
我在stackoverflow.com/questions/26854342/… 中发布了相关问题,其中包含在 Mono 中不起作用的答案
标签: asp.net-mvc asp.net-mvc-4 razor asp.net-web-api razor-2