.Net MVC: чтение пути к главной странице из любого представления - PullRequest
0 голосов
/ 28 августа 2009

У меня есть метод

RenderToString(string pathToView, string pathToMasterPage)

, который, как уже сказано в имени, отображает представление и возвращает результат в виде строки. В настоящее время я должен передать путь к главной странице в качестве параметра метода. Но поскольку само представление уже содержит определение главной страницы

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

Мне было интересно, возможно ли читать это значение программно, чтобы мне больше не приходилось передавать его как отдельный параметр?

1 Ответ

1 голос
/ 29 августа 2009

Метод RenderToString выглядит следующим образом:

public virtual string RenderToString(string viewPath, string masterPath)
{
    ControllerContext controllerContext = this.ControllerContext;
    Stream filter = null;
    ViewPage viewPage = new ViewPage();

    viewPage.ViewContext = new ViewContext(this.ControllerContext, new WebFormView(viewPath, masterPath), this.ViewData, this.TempData);

    //get the response context, flush it and get the response filter.
    var response = viewPage.ViewContext.HttpContext.Response;
    response.Flush();
    var oldFilter = response.Filter;

    try
    {
        //put a new filter into the response
        filter = new MemoryStream();
        response.Filter = filter;

        //render the view into the memorystream and flush the response
        viewPage.ViewContext.View.Render(viewPage.ViewContext, viewPage.ViewContext.HttpContext.Response.Output);
        response.Flush();

        //read the rendered view
        filter.Position = 0;
        var reader = new StreamReader(filter, response.ContentEncoding);
        return reader.ReadToEnd();
    }
    finally
    {
        //Clean up.
        if (filter != null)
        {
            filter.Dispose();
        }

        //Now replace the response filter
        response.Filter = oldFilter;
    }
}

Это не идеально. После выполнения метода вы больше не можете выполнять никаких перенаправлений, потому что ответ должен быть сброшен, а заголовки уже отправлены. Если вы найдете обходной путь для этого, пожалуйста, опубликуйте его здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...