我有两个单独的项目,一个在MVC,另一个在ASP.NET中。 我在MVC中有一个函数,它渲染一个视图并将其转换为一个工作正常的流。
我在ASP.NET中使用此函数,使用dll从ASP.NET渲染MVC视图。 问题是razorViewEngine.FindView总是返回null。
从ASP.NET渲染MVC视图的任何帮助都将节省我的时间,并使我免于返工。
public static Stream RenderView<T>(string controllerName, string viewName, T model, Dictionary<string, object> viewData = null)
{
var context = HttpContext.Current;
var contextBase = new HttpContextWrapper(context);
var routeData = new RouteData();
routeData.Values.Add("controller", controllerName);
var controllerContext = new ControllerContext(contextBase, routeData, new EmptyController());
var razorViewEngine = new RazorViewEngine();
var razorViewResult = razorViewEngine.FindView(controllerContext, viewName, "", false);
var writer = new StringWriter();
var vdd = new ViewDataDictionary<T>(model);
if (viewData != null)
{
foreach (var d in viewData)
vdd.Add(d.Key, d.Value);
}
var viewContext = new ViewContext(controllerContext, razorViewResult.View, vdd, new TempDataDictionary(), writer);
razorViewResult.View.Render(viewContext, writer);
byte[] byteArray = Encoding.UTF8.GetBytes(writer.ToString());
return new MemoryStream(byteArray);
}
class EmptyController : ControllerBase
{
protected override void ExecuteCore() { }
}