asp.net-mvc – 使用自定义HTML扩展在ASP.NET MVC 3 Razor View
发布时间:2020-12-16 07:31:25 所属栏目:asp.Net 来源:网络整理
导读:我刚刚安装了ASP.NET MVC 3 RC来尝试升级MVC 2站点.我遇到了一个渲染问题,我设法在网站之外重新编写,使用从头创建的MVC 3项目. 这是我的Razor cshtml视图: @using Mvc3RCTest.Helpersh2Demo Render Bug/h2div class="content"@{ Html.RenderTest(); }/div R
我刚刚安装了ASP.NET MVC 3 RC来尝试升级MVC 2站点.我遇到了一个渲染问题,我设法在网站之外重新编写,使用从头创建的MVC 3项目.
这是我的Razor 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扩展而不是直接写入输出? 解决方法
不幸的是,所有助手都应该写入ViewContext.Writer,就像这样
public static void RenderTest(this HtmlHelper html) { var writer = html.ViewContext.Writer; writer.Write("<ul>"); for (int i = 0; i < 10; ++i) { writer.Write("<li>" + i + "</li>"); } writer.Write("</ul>"); } 在aspx视图引擎中,事情可能对你有用,但这纯属巧合.这并不是说Razor本身就是在缓存任何东西.由于Razor页面由内而外呈现,它会将内容写入临时缓冲区,而临时缓冲区只有在您到达最顶层布局页面时才会在适当的时间写入响应流.如果您直接写入响应流,那么您将不按顺序编写内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .Net Core知识点
- 创建可扩展的ASP.Net MVC网站,而无需使用Session
- asp.net – 有一个很好的web.config编辑器吗?
- asp.net-mvc – 使用REST API进行身份验证
- asp.net – 在序列化“System.Reflection”类型的对象时检测
- asp.net-mvc – SessionStateTempDataProvider要求启用Sess
- asp.net – html脚本标签不使用类型javascript?
- entity-framework – 实体类型没有键定义的EF6
- 在Entity Framework中使用存储过程(一):实现存储过程的自
- asp-classic – ASP经典CDO电子邮件消息在textbody中使用UT
推荐文章
站长推荐
- asp.net – MVC 5 Web API与Facebook访问令牌到R
- asp.net-mvc-4 – 如何为Web API控制器方法指定C
- ASP.NET自定义控件 – 什么是最好的方式来包括嵌
- 扩展GridView实现的一个自定义无刷新分页,排序,
- asp.net – 由于Microsoft.Web.Services3.StateM
- 如何使用ASP.NET MVC引用CSS样式?
- asp.net-mvc – nhibernate:具有相同标识符值的
- asp.net-mvc – 在Umbraco 7中建立联系表格
- asp.net-mvc – MVC5在不使用System.Web的情况下
- asp.net – 增加IIS7 / Win7 Pro上的最大上传文件
热点阅读