Вызвать PartialViewResult контроллера из кода и отобразить в виде строки - PullRequest
0 голосов
/ 09 мая 2018

Есть ли способ вызвать контроллер из 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();
}

Дайте мне знать, могу ли я предоставить дополнительную информацию.

...