Look at this solution:
Render a view as a string
I used it to generate partial view and it worked. You'll have to switch to partial, but it shouldn't be the problem.
Edit:
I've done some corrects, worked with reflector and used solutions from previous questions. This code looks nicer. View rendering engine is strongly connected to HttpContext.Current, so we have to do some hacking:
    /// <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;
        } 
    }
It should be easily convertible to allow to render View (change ViewEngines.Engines.FindPartialView to ViewEngines.Engines.FindView). I don't see better solution.