Есть ли способ вызвать контроллер из 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();
}
Дайте мне знать, могу ли я предоставить дополнительную информацию.