Сохранить визуализированный Razor View как HTML-строку - PullRequest
0 голосов
/ 17 марта 2019

Возможно ли после того, как Razor View будет отображено в браузере, HTML-код и содержимое разметки (изображения, таблицы, данные и т. Д.) Могут быть сохранены в виде строки или другого типа?

Я хочу иметь возможность сгенерировать Razor View, чтобы клиент мог проверить, что все в порядке в выводе, затем я хочу, чтобы он нажал кнопку, которая сохраняет весь HTML (без всей разметки бритвы и т. Д.).).

Как передать HTML обратно Action, если он должен быть обработан перед рендерингом, то как это можно сделать.

Затем я могу использовать это для генерацииPDF, а также сэкономит время на обработку, так как я сохраню строку в базе данных.

Кстати, это не частичное представление, и при этом оно не будет использовать частичные представления, также я знаю, что есть некоторые вещи, которые нужно исправить вRazor View, меня больше интересует сохранение HTML на этом этапе.

TIA

Предварительный просмотр HTML Отображение HTML-сообщения

1 Ответ

0 голосов
/ 18 марта 2019

Вы можете использовать Middleware для получения копии HTML-кода, отправляемого в браузер. Создайте класс с именем ResponseToString со следующим содержимым:

public class ResponseToStringMidleware
{
    RequestDelegate _next;

    public ResponseToStringMidleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        var isHtml = context.Response.ContentType?.ToLower().Contains("text/html");
        Stream responseBody = context.Response.Body;
        using (var memoryStream = new MemoryStream())
        {
            context.Response.Body = memoryStream;

            await _next(context);

            if (context.Response.StatusCode == 200 && isHtml.GetValueOrDefault())
            {
                memoryStream.Position = 0;
                string html = new StreamReader(memoryStream).ReadToEnd();
                // save the HTML

            }
            memoryStream.Position = 0;
            await memoryStream.CopyToAsync(responseBody);
        }
    }
}

Замените // save the HTML некоторым кодом, чтобы сохранить HTML при необходимости. Зарегистрируйте промежуточное ПО в методе Configure вашего стартапа заранее:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    app.UseMiddleware<ResponseToStringMidleware>();
    ...
}

Дополнительная информация: Промежуточное программное обеспечение на страницах Razor

...