C# 呼叫控制器';s PartialViewResult来自代码并呈现为字符串
是否有一种方法可以从代码调用控制器的C# 呼叫控制器';s PartialViewResult来自代码并呈现为字符串,c#,asp.net-mvc,razor,controller,C#,Asp.net Mvc,Razor,Controller,是否有一种方法可以从代码调用控制器的ParitalViewResult,并将整个视图作为字符串返回。我希望通过数据库中的信息调用此控制器和操作,不要硬编码控制器调用,尽可能动态 例如,我有一个带有以下内容的TestscController(代码不完整,只是一个占位符): 我有一个ViewExtension,它可以将视图呈现为字符串,但它从来不会出现在TestsController的屏幕上。它只运行.cshtml 我可以称之为: strView = PartialView("~/Views/Tes
ParitalViewResult
,并将整个视图作为字符串返回。我希望通过数据库中的信息调用此控制器和操作,不要硬编码控制器调用,尽可能动态
例如,我有一个带有以下内容的TestscController
(代码不完整,只是一个占位符):
我有一个ViewExtension,它可以将视图呈现为字符串,但它从来不会出现在TestsController
的屏幕上。它只运行.cshtml
我可以称之为:
strView = PartialView("~/Views/Tests/_Display.cshtml", model).RenderToString();
使用此ViewExtension(工作正常,但不影响控制器:
public static string RenderToString(this PartialViewResult partialView)
{
var httpContext = HttpContext.Current;
if (httpContext == null)
{
throw new NotSupportedException("An HTTP context is required to render the partial view to a string");
}
var controllerName = httpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
var controller = (ControllerBase)ControllerBuilder.Current.GetControllerFactory().CreateController(httpContext.Request.RequestContext, controllerName);
var controllerContext = new ControllerContext(httpContext.Request.RequestContext, controller);
var view = ViewEngines.Engines.FindPartialView(controllerContext, partialView.ViewName).View;
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
using (var tw = new HtmlTextWriter(sw))
{
view.Render(new ViewContext(controllerContext, view, partialView.ViewData, partialView.TempData, tw), tw);
}
}
return sb.ToString();
}
请告诉我是否可以提供其他详细信息。不确定您的意思。您的意思是:
var c=new TestscController();c._Display();
?为什么需要将局部视图渲染为字符串?可能是
public static string RenderToString(this PartialViewResult partialView)
{
var httpContext = HttpContext.Current;
if (httpContext == null)
{
throw new NotSupportedException("An HTTP context is required to render the partial view to a string");
}
var controllerName = httpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
var controller = (ControllerBase)ControllerBuilder.Current.GetControllerFactory().CreateController(httpContext.Request.RequestContext, controllerName);
var controllerContext = new ControllerContext(httpContext.Request.RequestContext, controller);
var view = ViewEngines.Engines.FindPartialView(controllerContext, partialView.ViewName).View;
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
using (var tw = new HtmlTextWriter(sw))
{
view.Render(new ViewContext(controllerContext, view, partialView.ViewData, partialView.TempData, tw), tw);
}
}
return sb.ToString();
}