Рендеринг Tag Helper HTML из строки

2

У нас есть много помощников по тегам, и мы стремимся позволить другим разработчикам создавать страницы с помощью редактора кода, где они пишут некоторый помощник по тегам, и после отправки мы хотим отобразить вывод. Мы хотим создать что-то вроде w3

Возьмите минимальный пример, как в документации asp.net:

    public class EmailTagHelper : TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "a";
        }
    }

У нас есть редактор кода, когда пользователь пишет:

<email>[email protected]<email>

Я хочу выполнить этот помощник тегов и визуализировать из него строку HTML, которая должна быть:

<a>[email protected]</a>

Вещи могут стать действительно сложными, как вы можете себе представить.

Есть ли способ визуализации Tag Helper из строки, которая приходит из контроллера MVC?

Я пытался визуализировать частичные представления и просматривать компоненты в виде строки. Но не повезло. Я пытался использовать Html.Raw() с кодированием и декодированием, но также не помогло.

Есть идеи?

  • 0
    Я следил за этим проектом некоторое время, но развитие кажется медленным
  • 0
    как это связано с вопросом?
Показать ещё 2 комментария
Теги:
asp.net-core
asp.net-core-tag-helpers
tag-helpers

1 ответ

2
Лучший ответ

Вот небольшой пример того, как этого добиться. Предположим, у нас уже есть помощник по меткам электронной почты. AspNetCore 2.2

Startup.cs

В ConfigureServices(IServiceCollection services) добавьте этот бит кода

services.Configure<RazorViewEngineOptions>(options =>
{
    options.AllowRecompilingViewsOnFileChange = true;
});

Это позволяет механизму просмотра обнаруживать изменения файла и перекомпилировать представление. Если это не задано, никакое имя среды кроме Development не будет работать.

HomeController.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");
}

Простой код для чтения/записи в файл _MyTemplate.cshtml, который будет действовать как редактируемый фрагмент кода.

Views/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" />

Выполнение кода

Изображение 174551

  • 0
    Спасибо за подробный ответ. Я дам ему попробовать.
  • 0
    это работает, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню