Where are the ControllerContext and ViewEngines properties in MVC 6 Controller?

后端 未结 4 1292
温柔的废话
温柔的废话 2020-11-28 09:21

I\'ve created a new MVC6 project and building a new site. The goal is to get the rendered result of a view. I found the following code, but I can\'t get it to work because I

4条回答
  •  爱一瞬间的悲伤
    2020-11-28 09:50

    The released dotnet core 1.0 has changed, this version of the above code works with 1.0 RTM.

    protected string RenderPartialViewToString(string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.ActionDescriptor.DisplayName;
    
        ViewData.Model = model;
    
        using (StringWriter sw = new StringWriter())
        {
            var engine = _serviceProvider.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine; // Resolver.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
            ViewEngineResult viewResult = engine.FindView(ControllerContext, viewName, false);
    
            ViewContext viewContext = new ViewContext(
                ControllerContext,
                viewResult.View,
                ViewData,
                TempData,
                sw,
                new HtmlHelperOptions() //Added this parameter in
            );
    
            //Everything is async now!
            var t = viewResult.View.RenderAsync(viewContext);
            t.Wait();
    
            return sw.GetStringBuilder().ToString();
        }
    }
    

    These usings are required for this code to compile:

    using System.IO;
    using Microsoft.AspNetCore.Mvc.ViewEngines;
    using Microsoft.AspNetCore.Mvc.ViewFeatures;
    

    I also had to add a DI interfaces to the controller constructor:

    IServiceProvider serviceProvider
    

    My account constructor looks like this now:

    public AccountController(
        UserManager userManager,
        SignInManager signInManager,
        IEmailSender emailSender,
        ISmsSender smsSender,
        ILoggerFactory loggerFactory,
        IServiceProvider serviceProvider)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        _emailSender = emailSender;
        _smsSender = smsSender;
        _logger = loggerFactory.CreateLogger();
        _serviceProvider = serviceProvider;
    }
    

提交回复
热议问题