[英]HtmlTextWriter wrapper to HtmlHelper.ViewContext.Writer wrong date format
[英]HtmlHelper using ViewContext.Writer not rendering correctly
我正在使用asp.net MVC构建一个简单的CMS,并且几乎所有部分都在工作。 我有一个小问题,我无法解决。 我有一个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>
谢谢,
伊恩
您是否尝试过使用ViewContext.Writer.Write而不是Response.Write? 我认为这就是我在扩展方法中使用的方法,并且没有任何问题。
道歉,以解决一个已有很长时间的问题,但是我已经实现了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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.