asp.net-mvc – Mvc渲染动作/部分响应输出
发布时间:2020-12-16 07:41:57 所属栏目:asp.Net 来源:网络整理
导读:虽然@ Html.RenderPartial调用write并返回void,但它仍然写入StringWriter / StringBuilder.有没有办法直接渲染到ResponseStream? 这可以通过自定义IViewEngine完成,它实现像PdfView这样的渲染直接输出到ResponseStream吗? 加成 ViewResultBase.ExecuteResu
虽然@
Html.RenderPartial调用write并返回void,但它仍然写入StringWriter / StringBuilder.有没有办法直接渲染到ResponseStream?
这可以通过自定义IViewEngine完成,它实现像PdfView这样的渲染直接输出到ResponseStream吗? 加成 ViewResultBase.ExecuteResult显示使用Response.Output构建的ViewContext,但调试器将ViewContext.Writer显示为StringWriter 这两种方法都会产生StringWriter return PartialView("view",Model) // or PartialView("view",Model).ExecuteResult(ControllerContext) 编辑 似乎System.Web.WebPages.WebPageBase ExecutePageHeirarchy将临时StringWriter推送到上下文堆栈,所以我不确定是否可以绕过它 综上所述 RenderPartial,RenderAction不直接输出到Response.Stream,Razor Views都不会 解 这是新的WebPages / Razor渲染引擎,它将StringWriter的所有内容包装到StringBuilder中.解决方案是更改我的页面以使用不应用此包装的WebFormViewEngine. 解决方法
以下方法说明了实现您正在寻找的结果的一种方法:
// <summary> // An extension methods for rendering a model/view into a stream // </summary> // <param name="myModel">The model you are trying render to a stream</param> // <param name="controllerBase">This will come from your executing action</param> // <returns></returns> public static Stream GetStream(CustomModel myModel,ControllerBase controllerBase) { //we will return this stream MemoryStream stream = new MemoryStream(); //you can add variables to the view data controllerBase.ViewData["ViewDataVariable1"] = true; //set your model controllerBase.ViewData.Model = myModel; //The example uses the UTF-8 encoding,you should change that if you are using some other encoding. //write to a stream using (StreamWriter writer = new StreamWriter(stream,Encoding.UTF8)) { using (var sw = new StringWriter()) { //render the view ~/Views/Shared/_FeedbackMessage.cshtml (can be passed in as a parameter if you want to make it super generic) var viewResult = ViewEngines.Engines.FindPartialView(controllerBase.ControllerContext,"_FeedbackMessage"); //create a new view context var viewContext = new ViewContext(controllerBase.ControllerContext,viewResult.View,controllerBase.ViewData,controllerBase.TempData,sw); //Render the viewengine and let razor do its magic viewResult.View.Render(viewContext,sw); viewResult.ViewEngine.ReleaseView(controllerBase.ControllerContext,viewResult.View); //get StringBuilder from StringWriter sw and write into the stream writer //you could simply return the StringWriter here if that is what you were interested in doing writer.Write(sw.GetStringBuilder().ToString()); writer.Flush(); stream.Position = 0; } } //return the stream from the above process return stream; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 首先通过NuGet尝试StructureMap和MVC3
- 在WCF服务中使用ASP.NET成员资格提供者身份验证
- asp.net – 如何在SQL数据库中创建和存储用户定义的自定义字
- 如何创建ASP.NET RecaptchaControl自定义模板
- MONO / ASP.NET Linux主机?
- asp.net-mvc – F#Asp.Net CodeDom ProviderOptions问题
- 从ASP.NET应用程序写入IIS日志
- ASP.NET MVC UrlHelper.GenerateUrl异常:“无法使用导航..
- asp.net-mvc – 使用ASP.NET MVC测试驱动的开发 – 从哪里开
- ASP.NET OutputCache varyByParam在Web.config中不起作用
推荐文章
站长推荐
- asp.net – MVC3生成包含端口号的URL,如何阻止它
- asp.net-identity – 支持EF和Asp.NEt身份的Iden
- 什么是ASP.NET vNext?
- asp.net – 未知的服务器标签’ajaxToolkit:Cal
- asp.net – 如何从JavaScript访问ASPxTextBox的值
- asp.net – Azure服务结构:IReliableQueue
- 如何从ASP.NET Web服务生成JSONP以进行跨域调用?
- 在ASP.NET 2.0中使用Bit.ly API
- asp.net – System.InvalidOperationException:
- 什么是ASP.NET中的gpstate文件
热点阅读