Server.Execute () in ASP.NET MVC

Is there an equivalent to Server.Execute () in ASP.NET MVC?

Apparently this only works with traditional .aspx web pages.

Update: I need to capture the displayed HTML from another action in the same controller to create a PDF file. Maybe there is a way to execute a view without html output in the response stream?

+3
source share
3 answers

Take a look at this solution:

Display view as string

I used it to create a partial view, and it worked. You will have to switch to partial, but this should not be a problem.

Edit:

, . . HttpContext.Current, :

    /// <summary>Renders a view to string.</summary>
    public static string RenderViewToString(this Controller controller,
                                            string viewName, object viewData)
    {
        //Getting current response
        var response = HttpContext.Current.Response;
        //Flushing
        response.Flush();

        //Finding rendered view
        var view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName).View;
        //Creating view context
        var viewContext = new ViewContext(controller.ControllerContext, view,
                                          controller.ViewData, controller.TempData);

        //Since RenderView goes straight to HttpContext.Current, we have to filter and cut out our view
        var oldFilter = response.Filter;
        Stream filter = new MemoryStream(); ;
        try
        {
            response.Filter = filter;
            viewContext.View.Render(viewContext, null);
            response.Flush();
            filter.Position = 0;
            var reader = new StreamReader(filter, response.ContentEncoding);
            return reader.ReadToEnd();
        }
        finally
        {
            filter.Dispose();
            response.Filter = oldFilter;
        } 
    }

, View ( ViewEngines.Engines.FindPartialView ViewEngines.Engines.FindView). .

+2

Server.Execute MVC - .

public ActionResult EntryAction()
{
    ProductController pc = new ProductController();

    return pc.Index();
}

, , .

0

RenderViewToString. , , .

    /// <summary>Renders a view to string.</summary>
    public string RenderViewToString(ViewResult viewResult)
    {
        //Getting current response
        //var response = HttpContext.Current.Response;
        var response = Response;
        //Flushing
        response.Flush();

        //Finding rendered view
        var view = ViewEngines.Engines.FindView(ControllerContext, viewResult.ViewName, viewResult.MasterName).View;

        //Creating view context
        var viewContext = new ViewContext(ControllerContext, view,
                                          ViewData, TempData);

        //Since RenderView goes straight to HttpContext.Current, we have to filter and cut out our view
        var oldFilter = response.Filter;
        Stream filter = new MemoryStream();
        try
        {
            response.Filter = filter;
            viewContext.View.Render(viewContext, null);
            response.Flush();
            filter.Position = 0;
            var reader = new StreamReader(filter, response.ContentEncoding);
            return reader.ReadToEnd();
        }
        finally
        {
            filter.Dispose();
            response.Filter = oldFilter;
        }
    }
0

Source: https://habr.com/ru/post/1719916/


All Articles