净MVC:从任何视图
阅读母版页路径我有一个方法净MVC:从任何视图
RenderToString(string pathToView, string pathToMasterPage)
其中,好像是这个名字已经说,渲染视图,并返回结果为一个字符串。目前,我必须将路径传递到主页面,作为该方法的参数。但由于视图本身包含媒体链接母版页
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
我想知道是否有可能programaticly阅读价值的定义,所以我没有把它作为一个单独的参数了吗?
的RenderToString方法是这样的:
public virtual string RenderToString(string viewPath, string masterPath)
{
ControllerContext controllerContext = this.ControllerContext;
Stream filter = null;
ViewPage viewPage = new ViewPage();
viewPage.ViewContext = new ViewContext(this.ControllerContext, new WebFormView(viewPath, masterPath), this.ViewData, this.TempData);
//get the response context, flush it and get the response filter.
var response = viewPage.ViewContext.HttpContext.Response;
response.Flush();
var oldFilter = response.Filter;
try
{
//put a new filter into the response
filter = new MemoryStream();
response.Filter = filter;
//render the view into the memorystream and flush the response
viewPage.ViewContext.View.Render(viewPage.ViewContext, viewPage.ViewContext.HttpContext.Response.Output);
response.Flush();
//read the rendered view
filter.Position = 0;
var reader = new StreamReader(filter, response.ContentEncoding);
return reader.ReadToEnd();
}
finally
{
//Clean up.
if (filter != null)
{
filter.Dispose();
}
//Now replace the response filter
response.Filter = oldFilter;
}
}
它并不完美。执行该方法后,您不能再执行任何重定向,因为必须刷新响应,因此头文件已经发送。如果您找到解决方法,请在此处发布。
当我想要做同样的事情时,我发现了同样的帖子。当我试图在Json调用中返回一个呈现的用户控件时,发送的头文件足以阻止这对我的工作。不错,你可以发布这个阿德里安虽然+1 – 2009-08-28 20:24:07
我有同样的问题。我通过渲染仅部分(字符串)而不是呈现整页来解决此问题。渲染局部时,您不必刷新响应。 – Mato 2009-08-28 20:52:12
对不起,但你介意将代码分享给你的RenderToString函数吗?我使用的解决方法是在我自己的服务器上执行http请求。它工作正常,但你的方法似乎更好。 – 2009-08-28 19:32:21