我有一个控制器: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,但无法通过其他控制器功能调用它。
希望有人可以提供帮助,或者可以给我任何关于其他溶剂的提示。
答案 0 :(得分:0)
您可以使用此方法:
1 st - 你需要在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); //
}
}
}