我有一个像这样的 apicontroller:
public class MenuController : ApiController
{
[HttpGet]
public string GetMenu([FromUri]string page, [FromUri]string menu)
{
}
}
我有一个局部 View 说“menu.cshtml”我想使用那个局部 View 并在字符串中给出菜单。 我已经尝试了各种功能,说 renderpartialviewtostring 但他们在其中使用 Controller 但我正在使用 ApiController
请帮忙
最佳答案
您可以从 IHttpActionResult 派生您自己的类型并执行此操作。
您将需要对 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/