【问题标题】:how to get partialview string in a apicontroller in mvc如何在 mvc 的 apicontroller 中获取部分视图字符串
【发布时间】:2013-01-30 13:14:01
【问题描述】:

我有一个这样的 apicontroller:

public class MenuController : ApiController
{
    [HttpGet]
    public string GetMenu([FromUri]string page, [FromUri]string menu)
    {
    }

}

我有一个部分视图说“menu.cshtml”我想使用那个部分视图并在字符串中给出菜单。 我尝试了各种功能,说renderpartialviewtostring,但他们在其中使用控制器,但我使用的是ApiController

请帮忙

【问题讨论】:

    标签: asp.net-mvc razor asp.net-mvc-4


    【解决方案1】:

    您可以从 IHttpActionResult 派生出您自己的类型并执行此操作。

    这篇文章谈论它 - http://www.strathweb.com/2013/06/ihttpactionresult-new-way-of-creating-responses-in-asp-net-web-api-2/

    您需要参考 RazorEngine - http://www.nuget.org/packages/RazorEngine/

    在您的情况下,您可以创建一个从 IHttpActionResult 派生的 StringActionResult,它执行类似于下面的操作。

    public class StringActionResult : IHttpActionResult
    {
        private const string ViewDirectory = @"c:\path-to-views";
        private readonly string _view;
        private readonly dynamic _model;
    
        public StringActionResult(string viewName, dynamic model)
        {
            _view = LoadView(viewName);
            _model = model;
        }
    
        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            var parsedView = RazorEngine.Razor.Parse(_view, _model);
            response.Content = new StringContent(parsedView);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
            return Task.FromResult(response);
        }
    
        private static string LoadView(string name)
        {
            var view = File.ReadAllText(Path.Combine(ViewDirectory, name + ".cshtml"));
            return view;
        }
    }
    

    然后在你的控制器中,做这样的事情。

      public class MenuController : ApiController
        {
            [HttpGet]
            public StringActionResult GetMenu([FromUri]string page, [FromUri]string menu)
            {
                 return new StringActionResult("menu", new {Page: page, Menu: menu});
    
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 2015-02-02
      相关资源
      最近更新 更多