Есть ли способ вызвать ParitalViewResult контроллера из кода и вернуть все представление в виде строки. Я хочу вызвать этот контроллер и действие из информации, которая есть в базе данных, без жестко запрограммированных вызовов контроллера, как можно более динамично.
Например, у меня есть TestscController со следующим PartialViewResult (код неполный, просто заполнитель):
public PartialViewResult _Display ()
{
return PartialView();
}
У меня есть ViewExtension, который будет отображать View в String, но никогда не попадает в _Display 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();?