asp.net-mvc-2 – 在MVC 2中使用自定义TextWriter时,“BinaryWrite异常”OutputStream不可用ASP.NET 4

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-2 – 在MVC 2中使用自定义TextWriter时,“BinaryWrite异常”OutputStream不可用ASP.NET 4前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用响应BinaryWrite方法渲染流的视图.这一切都在ASP.NET 4使用Beta 2工作正常,但在RC版本中抛出此异常:

“HttpException”,“OutputStream is not
available when a custom TextWriter is
used.”

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="System.IO" %>
<script runat="server">
protected void  Page_Load(object sender,EventArgs e)
{
    if (ViewData["Error"] == null)
    {

        Response.Buffer = true;
        Response.Clear();
        Response.ContentType = ViewData["DocType"] as string;
        Response.AddHeader("content-disposition",ViewData["Disposition"] as string);
        Response.CacheControl = "No-cache";
        MemoryStream stream = ViewData["DocAsStream"] as MemoryStream;
        Response.BinaryWrite(stream.ToArray());
        Response.Flush();
        Response.Close();
    }
}   
</script>


</script>

视图是从客户端重定向生成的(jquery替换前一页中的位置调用,使用Url.Action帮助程序渲染链接当然).这一切都在一个iframe中.

任何人都有一个想法为什么会发生这种情况?

解决方法

当ViewPage开始执行时,它会假定有关请求的其余部分的某些内容.绊倒你的特定事情是,ViewPage假定请求的其余部分将是一个正常的HTML或一些其他文本响应,所以它将自己的作者的响应的TextWriter切换.

在您的情况下,您应该创建一个新的ActionResult派生类,其ExecuteResult方法将逻辑封装在Page_Load方法中.您的操作方法应返回您的自定义类的实例,并且调用者将在适当的时候运行ExecuteResult方法.这完全绕过视图引擎,这样可以防止您正在运行的错误,并提供轻微的性能提升.

猜你在找的asp.Net相关文章