ASP.NET MVC: how can I visualize a flow control?

So, I present a partial view in memory in order to direct the XSL-FO data to the view in PDF rendering.

The PDF renderer can accept a string, XmlDocument, or Stream as input.

Here is what I would like to do: ( Edited for clarity )

The solution is taken from: http://thriftybliss.spaces.live.com/blog/cns!58DA805F37F31F20!170.entry?wa=wsignin1.0&sa=362921628

var viewPage = new ViewPage();
var viewData = new ViewDataDictionary(model);
viewPage.ViewData = viewData;

var control = viewPage.LoadControl(viewName);
viewPage.Controls.Add(control);

using (var inStream = new MemoryStream())
{
    using (var sw = new StreamWriter(inStream))
    {
        using (var tw = new HtmlTextWriter(sw))
        {
            viewPage.RenderControl(tw);
        }
        using (var outStream = new MemoryStream())
        {
            driver.Render(inStream, outStream);
            return outStream.ToArray();
        }
    }
}

Here's what works, but what I don't want to do:

var sb = new StringBuilder();

using (var sw = new StringWriter(sb))
{
    using (var tw = new HtmlTextWriter(sw))
    {
        vp.RenderControl(tw);
    }
}

var xml = new XmlDocument();
xml.LoadXml(sb.ToString());

using (var ms = new MemoryStream())
{
    driver.Render(xml, ms);
    return ms.ToArray();
}

Unfortunately, HtmlTextWriter doesn't seem to want to write to StreamWriter, or maybe I just messed up something.

StreamWriter StringWriter, , StringWriter, , .ToString(), escape-, XSL-FO, " " ".

, XmlDocument , -. HtmlTextWriter Renderer. ?

!

+3
2

: "HtmlTextWriter, , StreamWriter", , driver.Render inStream? , ...

-, HtmlTextWriter , sw.Flush(), inStream driver.Render.

-, MemoryStream , ( ).

inStream.Position 0 inStream.Seek(0, SeekOrigin.Begin) driver.Render .

, .

+1

AT ALL... RenderViewToString,

    public static Stream RenderViewToStream<T>(string viewPath, T model, ControllerContext controllerContext)
    {
        var ms = new MemoryStream();
        using (var writer = new StreamWriter(ms))
        {
            var view = new WebFormView(viewPath);
            var vdd = new ViewDataDictionary<T>(model);
            var viewCxt = new ViewContext(controllerContext, view, vdd, new TempDataDictionary(), writer);
            viewCxt.View.Render(viewCxt, writer);
        }
        return ms;
    }
-1

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


All Articles