I am trying to update this tutorial on implementing Facebooks BigPipe to razor.
There is a html helper extension that adds a pagelet to a list, and then outputs a holding div to the response. The idea is that later on the content of this pagelet is rendered to a string, and then injected into this holding div via javascript.
public static void RegisterPagelet(this HtmlHelper helper, Pagelet pagelet) {
var context = helper.ViewContext.HttpContext;
List<Pagelet> pagelets = (List<Pagelet>)context.Items["Pagelets"];
if (pagelets == null) {
pagelets = new List<Pagelet>();
context.Items["Pagelets"] = pagelets;
}
pagelets.Add(pagelet);
context.Response.Write("<div id=\"" + pagelet.Container + "\"></div>");
}
In the example this function is called like this:
<div id="textHolder">
<% Html.RegisterPagelet(myPagelet); %>
</div>
Which adds the pagelet to the lists, and outputs the holding div to the response stream.
So
<div id="textHolder">
<div id="pageletPlaceHolder"></div>
</div>
However, when I try the same in Razor:
<div id="textHolder">
@{ Html.RegisterPagelet(myPagelet); }
</div>
The div placeholder appears at the top of the body, outside the textHolder div. Why is this? How can I get this to behave like the webforms view where the response is output inside the div?
Thanks.