Я создаю простую 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
вместо этого не имеет никакого значения.
<div id="Main" class="content-area"></div>
<h1>Default Template</h1>
Спасибо,
Ян