从ASP.NET

时间:2015-12-29 07:44:30

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有两个单独的项目,一个在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() { }
    }

0 个答案:

没有答案