我刚刚安装了ASP.NET MVC 3 RC以尝试升级MVC 2网站。我遇到了一个渲染问题,我使用从头开始创建的MVC 3项目,在网站外部重新渲染。在ASP.NET MVC 3 Razor View Engine中渲染损坏使用自定义HTML扩展
这里是我的剃刀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>
如您所见,RenderTest HTML扩展的输出错误地发出了之前其余的Razor模板。看起来好像Razor渲染引擎正试图缓存整个输出,而不知道HTML扩展可以直接写入输出。
有没有其他人看到过这个问题?任何人都知道如何解决这个问题,而不必重做所有的HTML扩展,不要直接写入输出?
谢谢,你保存了一天。因为这个,我正要放弃升级到MVC 3! – DSO 2010-11-14 09:00:55
实际上,我希望Razor引擎不会缓存我所有的Write调用......执行写操作与返回字符串的整个目的是在大量数据时更高效。 – DSO 2010-11-14 09:15:03