C# 从字符串呈现标记帮助器html

C# 从字符串呈现标记帮助器html,c#,.net,asp.net-core,tag-helpers,asp.net-core-tag-helpers,C#,.net,Asp.net Core,Tag Helpers,Asp.net Core Tag Helpers,我们有很多标记帮助程序,希望允许其他开发人员尝试通过代码编辑器创建页面,他们在代码编辑器中编写一些标记帮助程序,提交后,我们希望呈现输出。我们想创造一些类似的东西 以asp.net文档中的最小示例为例,如下所示: public class EmailTagHelper : TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output)

我们有很多标记帮助程序,希望允许其他开发人员尝试通过代码编辑器创建页面,他们在代码编辑器中编写一些标记帮助程序,提交后,我们希望呈现输出。我们想创造一些类似的东西

以asp.net文档中的最小示例为例,如下所示:

    public class EmailTagHelper : TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "a";
        }
    }
当用户写入以下内容时,我们有一个代码编辑器:

<email>foo@foo.com<email>
foo@foo.com
我希望执行此标记帮助器并从中呈现HTML字符串,该字符串应为:

<a>foo@foo.com</a>
foo@foo.com
事情会变得非常复杂,正如你所想象的

有没有一种方法可以从来自MVC控制器的字符串中呈现标记帮助器

我尝试将部分视图和视图组件渲染为字符串。但是没有运气。我尝试使用
Html.Raw()
进行编码和解码,但也没有帮助


有什么想法吗?

这里有一个关于如何实现这一点的基本示例。假设我们已经有了电子邮件标签助手。AspNetCore 2.2

Startup.cs

private readonly IHostingEnvironment _hostingEnvironment;
private readonly string _myTemplatePath;

public HomeController(IHostingEnvironment hostingEnvironment)
{
    _hostingEnvironment = hostingEnvironment;
    _myTemplatePath = Path.Combine(_hostingEnvironment.ContentRootPath, @"Views\Shared\_MyTemplate.cshtml");
}

public IActionResult Index()
{
    var myTemplateCode = System.IO.File.ReadAllText(_myTemplatePath); 

    return View(new MyTemplateViewModel
    {
        TemplateCode = myTemplateCode
    });
}

[HttpPost]
public IActionResult UpdateMyTemplate(MyTemplateViewModel viewModel)
{
    System.IO.File.WriteAllText(_myTemplatePath, viewModel.TemplateCode);

    return RedirectToAction(nameof(Index));
}

public IActionResult GetMyTemplate()
{
    return View("_MyTemplate");
}
ConfigureServices(IServiceCollection服务)
中添加此代码位

services.Configure<RazorViewEngineOptions>(options =>
{
    options.AllowRecompilingViewsOnFileChange = true;
});
一些简单的代码可以读/写到_MyTemplate.cshtml文件,该文件将充当代码的可编辑位

视图/Home/Index.cshtml

<form asp-action="UpdateMyTemplate" method="post">
    <textarea asp-for="TemplateCode" rows="10"></textarea><br />
    <button type="submit">Save Changes</button>
</form>

<h2>Output</h2>
<partial name="_MyTemplate" />


保存更改 输出
运行代码


我已经关注了一段时间,但发展似乎很慢,它与问题有什么关系?你想用一个字符串并通过razor运行它来输出html,是吗?不可能。标记助手必须出现在实际的Razor视图中。@Shoe引用的是一种以编程方式呈现字符串的方法,就像它们是完整视图一样。这可能是一个潜在的解决方法,但您必须从根本上改变项目使用视图的方式。就使用标准的*.cshtml文件而言,这不是一个好方法。感谢您提供详细的答案。我要试一试。