我建立一个简单的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>
谢谢,
伊恩