我有一个 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/