在我的MVC3应用程序中,当用户使用IE<时,我希望删除输出的所有HTML5标签。 9,以避免使用前端解决方法。
我已经在控制器和HttpModule
内部使用了ActionFilter
,OnResultExecuted
,Application_Start
方法。
到目前为止,我想我需要使用以下内容从HttpApplication.Context.Response.OutputStream
获取字符串输出:
HttpApplication application = (HttpApplication)source;
HttpResponse response = application.Context.Response;
StreamReader sr = new StreamReader(stream);
string content = sr.ReadToEnd();
但我得到的是同样的错误Stream was not readable
。
我可以使用context.Response.Write
写回复。
从阅读SO和谷歌,MVC似乎没有相同的“页面生命周期”有webforms(我只是覆盖Render
,它工作正常),这使得sens。
所以我的问题是如何在MVC中将HTML作为字符串获取?有没有人试图操纵html输出?
答案 0 :(得分:7)
我认为您应该可以使用ActionFilter来执行此操作。我见过有人在this blog post.或this post修改输出流的示例。
答案 1 :(得分:3)
HTML5是向后兼容的,所以在任何浏览器上都可以免费使用此默认输出。诸如IE6之类的过时浏览器仍然可以正确呈现,甚至不显眼的验证也可以正常工作。所以我的建议是保持输出不变。
答案 2 :(得分:0)
为什么不使用javascript?只需确定什么是用户浏览器并删除所需的html。 JQuery有很好的方法可以做到这一点。
答案 3 :(得分:0)
为了遵循MVC模式的概念,我会根据浏览器是否支持HTML 5而不是尝试提取输出来使用不同的View实现。另一种方法是通过第三方库使用控件,当浏览器不支持所有最新功能(或者库可以独立实现控件)时,第三方库可以优雅地分解。与ASP.NET MVC一起提供的JQuery是一个理想的,有许多可用的控件可以覆盖大多数HTML5标签。