加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在ASP.NET MVC4 Api控制器中将视图呈现为字

发布时间:2020-12-16 09:40:59 所属栏目:asp.Net 来源:网络整理
导读:ASP.NET MVC4 Web API控制器应该在json结果属性中将Razor视图作为html返回. 我试过控制器 public class TestController : ApiController{ public HttpResponseMessage Get() { var body = RenderViewToStringobject("~/Views/Broneeri/Schedule.cshtml",new
ASP.NET MVC4 Web API控制器应该在json结果属性中将Razor视图作为html返回.

我试过控制器

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内容?

解决方法

您需要使用NuGet控制台安装包RazorEngine.这是适用于我的代码:

using RazorEngine;
using RazorEngine.Templating;

string razorTemplate = "Hello @Model!";
string html = Engine.Razor.RunCompile(
    razorTemplate,"uniqueTemplateKey",// Guid.NewGuid().ToString() for example
    modelType: typeof(string),model: "Lorem Ipsum");

希望能帮助到你!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读