html - 来自其他 Controller 的调用的 MVC : Get HTML string From Controller/Action,

标签 html asp.net-mvc view render

我有一个 Controller :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 的 View 。

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

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

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

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

我想从另一个 Controller 调用上面的代码。

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

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

最佳答案

您可以使用这种方法:

第 1 步 - 您需要在 nugget 包 maneger 中安装 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); //
    }
}

关于html - 来自其他 Controller 的调用的 MVC : Get HTML string From Controller/Action,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439470/

相关文章:

javascript - 从 MVC 中的自定义 View 模型在 Razor 页面上使用 JavaScript 创建 JSON 对象数组?

javascript - 如何获取使用相同名称的 id 数量

android - 如何获取当前 Canvas ?

c# - 如何使用 C# 在 SQL Server 数据库中创建 View ?

mysql - View 的索引字段是否会提高 MySQL 的性能?

javascript - 叶节点 cytoscape 的不同行为

javascript - 构建我的第一个 Web 应用程序的好资源(可能只使用纯 HTML5/Javascript/CSS3)

c# - 在 Debug模式下进行用户测试——为什么不呢?

java - 为什么 Java Swing html 字体渲染看起来这么糟糕?

javascript - JQuery 手机 : stopPropagation() makes blank page flash on href click