我正在尝试更新本教程,以将 Facebooks BigPipe 实施到剃须刀。
有一个 html 帮助器扩展,可将 pagelet 添加到列表中,然后将保存的 div 输出到响应中。这个想法是稍后这个 pagelet 的内容被呈现为一个字符串,然后通过 javascript 注入到这个持有的 div 中。
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>");
}
在示例中,此函数的调用方式如下:
<div id="textHolder">
<% Html.RegisterPagelet(myPagelet); %>
</div>
它将 pagelet 添加到列表中,并将保存的 div 输出到响应流。
所以
<div id="textHolder">
<div id="pageletPlaceHolder"></div>
</div>
但是,当我在 Razor 中尝试相同的操作时:
<div id="textHolder">
@{ Html.RegisterPagelet(myPagelet); }
</div>
div 占位符出现在正文的顶部,在 textHolder div 之外。为什么是这样?我怎样才能让它表现得像在 div 内输出响应的 webforms 视图?
谢谢。