#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
Комментарии:
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