Сохранить отрисованный Razor View в виде HTML-строки

#c# #html #asp.net-core-2.0 #razor-pages

#c# #HTML #asp.net-core-2.0 #razor-страницы

Вопрос:

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

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

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

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

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

TIA

Предварительный рендеринг HTML
Рендеринг HTML Post

Комментарии:

1. Что будет проверять клиент? Имейте в виду, что, хотя HTML может быть правильным, он может ссылаться на javascript, изображения или css, которые не отображаются в HTML. Если клиент не собирается просматривать HTML напрямую, просто наличие этой части решения может на самом деле не помочь. Я подозреваю, что вы добились бы большего успеха, создав среду UAT и опубликовав там свой фактический код, чтобы клиент мог видеть «настоящий» веб-сайт.

2. Они должны проверить правильность данных, которые отображаются на странице, в рамках их процесса контроля качества. Я буду рад отрисовывать страницу на стороне сервера (в памяти), если это вообще возможно. Я также могу отредактировать строку, чтобы удалить <script> и т.д., Поэтому меня это не слишком беспокоит.

3. QA должен использовать среду QA / UAT и просматривать фактический результат, а не какой-то «снимок», который, возможно, был изменен до того, как они его увидели.

4. Я думаю, вы что-то недопонимаете. Это не имеет ничего общего со средой UAT, оно показывает клиенту небольшой набор их собственных данных между двумя датами. Специалисты по контролю качества — это технические специалисты, им не нужен UAT.

Ответ №1:

Вы можете использовать промежуточное программное обеспечение для получения копии 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 amp;amp; 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