Я только что установил ASP.NET MVC 3 RC, чтобы попытаться обновить сайт MVC 2. Я столкнулся с проблемой рендеринга, которую мне удалось воспроизвести за пределами сайта, используя проект MVC 3, созданный с нуля.
Вот мой вид бритвы cshtml:
@using Mvc3RCTest.Helpers
<h2>Demo Render Bug</h2>
<div class="content">
@{ Html.RenderTest(); }
</div>
RenderTest - это расширение HTML, определенное следующим образом:
using System.Web;
using System.Web.Mvc;
namespace Mvc3RCTest.Helpers
{
public static class TestHtmlExtensions
{
public static void RenderTest(this HtmlHelper html)
{
HttpResponseBase r = html.ViewContext.HttpContext.Response;
r.Write("<ul>");
for (int i = 0; i < 10; ++i)
{
r.Write("<li>" + i + "</li>");
}
r.Write("</ul>");
}
}
}
Когда это отображается, HTML выглядит следующим образом:
<ul><li>0</li><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li></ul>
<h2>Demo Render Bug</h2>
<div class="content">
</div>
Как видите, выходные данные расширения HTML RenderTest были неправильно отправлены до остальной части шаблона Razor. Кажется, что движок рендеринга Razor пытается кэшировать весь вывод, не зная, что расширения HTML могут писать напрямую в вывод.
Кто-нибудь еще видел эту проблему? Кто-нибудь знает, как обойти это, без необходимости переделывать все мои HTML-расширения, чтобы не записывать напрямую в вывод?