ASP.Net MVC 3 Razor Response.Write position

后端 未结 4 911
半阙折子戏
半阙折子戏 2021-02-12 17:28

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 holdin

相关标签:
4条回答
  • 2021-02-12 17:57

    A Razor view is rendered inside-out. Basically it writes content to temporary buffers which get written to the response stream when the top most layout page is reached. Thus, writing directly to the response stream from your HtmlHelper extension, will output it out of order.

    The solution is to use:

    helper.ViewContext.Writer.Write("<div id=\"" + pagelet.Container + "\"></div>");
    
    0 讨论(0)
  • 2021-02-12 17:57

    I wouldn't bother doing it. The end result you want is t have FooBar written within your div, so why not just write it into your div? Why do you need to use Response.Write?

    0 讨论(0)
  • 2021-02-12 18:03

    Change your method to be not void, but returning MvcHtmlString

    public static MvcHtmlString OutputText(this HtmlHelper helper, string text) {
         return New MvcHtmlString(text);
    }
    

    Than use this as you used to

    <div id="textHolder">
        @Html.OutputText("FooBar");
    </div>
    

    Idea is inspired by the fact that almost every input(and other) extension method in MVC returns MvcHtmlString

    0 讨论(0)
  • 2021-02-12 18:10

    You should use the ViewBag and put the string in there, then output it.

    In controller:

    ViewBag.Foo = Bar;
    

    In view:

    <div>
    @ViewBag.Foo
    </div>
    
    0 讨论(0)
提交回复
热议问题