【问题标题】:MVC : Get HTML string From Controller/Action, from a call from other controllerMVC:从控制器/动作中获取 HTML 字符串,来自其他控制器的调用
【发布时间】:2026-01-31 19:30:01
【问题描述】:

我有一个控制器:TestController.cs

public ActionResult Test()
{
    return View();        
}

public string TestHtml()
{        
    //Get Result of Test as HTML string
    string HTMLString = "";

    ActionResult AR = Test();
    //Convert AR to HTML string

    HTMLString = ConvertActionResultToHtml(AR);

    //do something with HTMLString

    return HTMLString;
}

Test() 函数有一个视图,它返回一段 HTML。

当我调用 TestHtml() 函数时,我想获得相同的 HTML,但作为字符串,所以我需要函数“ConvertActionResultToHtml”。有没有类似的东西。

我知道有 MVC2mail 组件可以做同样的事情,将视图呈现为电子邮件。

当它可以完成时,我希望有一个通用函数来实现这一点。喜欢:

public string GetHTMLFromControllerAction(string Controller, string Action) {
    //This function returns the result of a controller action as HTML string
    return ""; //
} 

上面的代码我想从另一个控制器调用。

我尝试了以下代码: How to get view html and return to client side,但无法从另一个控制器函数调用它。

希望有人可以提供帮助,或者可以就其他解决方案给我任何提示。

【问题讨论】:

    标签: html asp.net-mvc view render


    【解决方案1】:

    您可以使用这种方法:

    1 st - 您需要在 nugget 包管理器中安装 RazorEngine;

    现在你可以使用这个代码了:

    using System;
    using System.IO;
    using RazorEngine.Configuration;
    using RazorEngine.Templating;
    
    namespace Test.ActionAsHtml.Models
    {
        public class GetStringFromAction
        {
            private readonly static string _conventionFolderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Views");
            private readonly IRazorEngineService _razorEngineService;
    
        public GetStringFromAction()
        {
            var templateConfig = new TemplateServiceConfiguration
            {
                TemplateManager = new DelegateTemplateManager(controllerAndAction => File.ReadAllText(Path.Combine(_conventionFolderPath, controllerAndAction))),
                DisableTempFileLocking = true,
                CachingProvider = new DefaultCachingProvider(t => { })
            };
            _razorEngineService = RazorEngineService.Create(templateConfig);
        }
        public string GetHTMLFromControllerAction(string controller, string action, object model)
        {
            //C# 6
            var actionController = $"{controller}/{action}.cshtml";
            //var actionController = string.Format("{0}/{1}.cshtml",controller,action);
            return _razorEngineService.RunCompile(actionController, model.GetType(), model); //
        }
    }
    

    }

    【讨论】:

      最近更新 更多