asp.net-mvc - 如何在 mvc 的 apicontroller 中获取部分 View 字符串

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

我有一个像这样的 apicontroller:

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

}

我有一个局部 View 说“menu.cshtml”我想使用那个局部 View 并在字符串中给出菜单。 我已经尝试了各种功能,说 renderpartialviewtostring 但他们在其中使用 Controller 但我正在使用 ApiController

请帮忙

最佳答案

您可以从 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;
    }
}

然后在你的 Controller 中,做这样的事情。

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

        }

    }

关于asp.net-mvc - 如何在 mvc 的 apicontroller 中获取部分 View 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604927/

相关文章:

asp.net-mvc - Asp.net MVC 4 + WEB API - 自定义身份验证 token

asp.net-mvc - 使用 .Net MVC,如何列出播放不同文件的多个 html 音频播放器?

c# - 如何在asp.net mvc 中为属性路由添加默认参数

.net - 如何将我的 HTTP 处理程序用于选定的路径,并将 MVC 处理程序用于其余路径?

asp.net-mvc-3 - ASP.NET MVC 3 不接受我的德语日期格式设置 - 为什么?

razor - 如何在mvc3中以货币格式显示金额

javascript - 如何在不使用信号器和拉取的情况下创建推送消息?

javascript - knockout.js 单击一个 View 模型并基于该 View 模型渲染其他 View 模型

javascript - 如何将用户 session 变量设置为 ckeditor lite 用户名以跟踪更改

c# - 如何从 ServiceStack 服务返回没有布局的 View 结果?