使用的HtmlHelper不ViewContext.Writer正确渲染(HtmlHelper us

2019-10-28 16:08发布

我建立一个简单的CMS与asp.net MVC和我几乎所有的工作零件。 我有一个小问题,我可以不知道如何解决。 我有使区域内容的HTML辅助方法。 然而,这种方法使用Response.Write写的内容,而不是返回一个字符串。 这样做的原因是,我在执行部分请求,因此没有一个字符串返回。

我的模板的身体看起来是这样的:

<body>
    <h1>Default Template</h1>
    <% Html.ContentArea("Main"); %>
</body>

我遇到的问题是,内容呈现H1标签上面。 我的理解是,H1应该已经在反应和我调用response.Write()因此将在该点之后追加的内容。 这显然并非如此。 缺少什么我在这里。

我用部分请求之前,他们总是在正确的位置呈现。 我还没有使用过与MVC 2,这可能可能是问题。

以下是内容区域扩展方法。 窗口小部件呈现方法而不同,并且其中所述局部请求发生。 然而,即使在开始和结束的集装箱电子标签使上述H1所以它要的东西我做错了基础。

    public static void ContentArea(this HtmlHelper htmlHelper, string areaName)
    {
        var container = new TagBuilder("div");
        container.GenerateId(areaName);
        container.AddCssClass("content-area");

        var response = htmlHelper.ViewContext.HttpContext.Response;

        response.Write(container.ToString(TagRenderMode.StartTag));

        var pageWidgets = htmlHelper.ViewData[areaName] as IList<PageWidget>;
        if (pageWidgets != null)
            foreach (var widget in pageWidgets)
            {
                widget.GetInstance().Render(new WidgetContext(htmlHelper.ViewContext, widget));
            }

        response.Write(container.ToString(TagRenderMode.EndTag));
    }

这也可能是一些简单...是不是总是:)

编辑:

即使是下面不正确呈现采取先前的评论使用ViewContext.Writer而不是没有什么区别。

    public static void ContentArea(this HtmlHelper htmlHelper, string areaName)
    {
        var container = new TagBuilder("div");
        container.GenerateId(areaName);
        container.AddCssClass("content-area");

        var writer = htmlHelper.ViewContext.Writer;

        writer.Write(container.ToString(TagRenderMode.StartTag));

        writer.Write(container.ToString(TagRenderMode.EndTag));
    }

这使得作为

<div id="Main" class="content-area"></div>
<h1>Default Template</h1>

谢谢,

伊恩

Answer 1:

你是否尝试过使用ViewContext.Writer.Write而非的Response.Write? 我认为这就是我在我的扩展方法使用,我也没有任何问题。



Answer 2:

道歉挖了一年之久的问题,但我已经实现了OP的代码,我不能重现在ASP.NET MVC 2这个问题。

有了这个在我看来...

<body>
    <h1>Default Template</h1>
    <% Html.ContentArea2("Main"); %>
</body>  

......我得到这个生成的输出:

<body>
    <h1>Default Template</h1>
    <div class="content-area" id="Main"></div>
</body>


文章来源: HtmlHelper using ViewContext.Writer not rendering correctly