C# 从字符串呈现标记帮助器html
我们有很多标记帮助程序,希望允许其他开发人员尝试通过代码编辑器创建页面,他们在代码编辑器中编写一些标记帮助程序,提交后,我们希望呈现输出。我们想创造一些类似的东西 以asp.net文档中的最小示例为例,如下所示: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)
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文件而言,这不是一个好方法。感谢您提供详细的答案。我要试一试。