У нас есть веб-форма asp.net, извлекающая разметку из базы данных и отправляющая в браузер для отображения в виде html.
Html выборочно удаляется из тегов html только из части этой разметки и вместо этого отображается как обычный текст.
Я проверил исходный код, и все теги присутствуют, поэтому вряд ли проблема сервера с контроллером asp (я все равно проверил, см. ниже) - я проверил правильность html на validator.w3c.org, и ничего нет. браузер должен удалить как недействительный.
Контроллер в веб-форме asp:literal, поэтому я подумал, что он может быть в неправильном режиме, однако я поиграл с этим, и улучшений нет. Кроме того, часть html в любом случае отображалась правильно, так что вряд ли это всегда было проблемой.
Я думаю, что это может быть как-то связано с сетевым запросом, переопределяющим некоторые стили, поскольку он изначально отображается правильно, но когда страница загружает дополнительные краски, удалите теги с отображаемой страницы. Предварительный просмотр рассматриваемого модуля на вкладке сети также отображается правильно.
Итак, код в исходниках:
<div class='classname class'>
<div class='classname'>
<div class='classname'><img id = 'myImg' src='https://imgurl.com' alt='A Description'></div>
</div>
<div class='classname'>
<h1>A Heading of My Subject</h1>
<p class='classname'>And then some more.</p>
</div>
<div id='myId'>
<div class='classname'>
<h1> A Heading of My Subject </h1>
<p>Stripping subject from text.</p>
<h2> A Secondary Heading for More Info</h2>
<p>An abstraction of my paragraph text.</p>
<h2> Another Secondary Heading </h2>
<p>Lorem Ipsum forever!</p>
<p>And yet another paragraph.</p>
</div>
</div>
</div>
Фактический HTML-код:
<div class='classname class'>
<div class='classname'>
<div class='classname'><img id = 'myImg' src='https://imgurl.com' alt='A Description'></div>
</div>
<div class='classname'>
<h1>A Heading of My Subject</h1>
<p class='classname'>And then some more.</p>
</div>
<div id='myId'>
<div class='classname'>
" A Heading of My Subject
Stripping subject from text.
A Secondary Heading for More Info
An abstraction of my paragraph text.
Another Secondary Heading
Lorem Ipsum forever!
And yet another paragraph."
</div>
</div>
</div>
Любопытно, что добавляются и двойные кавычки, не знаю, что там происходит.
Соответствующий код программной части:
Page.Title = Name + " - " + Var;
LocOutput.Append("<div class='classname'>" + Environment.NewLine);
LocOutput.Append("<div class='classname'>" + Environment.NewLine);
LocOutput.Append("<div class='classname'><img id='asd' src='" + imgurl + "' alt='" + imgdescription + "'></div>" + Environment.NewLine);
LocOutput.Append("</div>" + Environment.NewLine);
LocOutput.Append("<div class ='classname'><h1>" + Name + "</h1><p class='classname'>" + Name2 + "</p></div>" + Environment.NewLine);
LocOutput.Append("<div id = 'idNameo'><div class ='classname'>" + Content + "</div></div>" + Environment.NewLine);
if (myVar == "condition")
{
LocOutput.Append("<div id = 'idNameod2' value = '" + Var3+ "'></div>" + Environment.NewLine);
}
LocOutput.Append("</div>" + Environment.NewLine);
LocationDetails.Text = LocOutput.ToString();
Удаленный html полностью находится внутри переменной Content.
Контроль это:
<asp:Literal ID = "LocationDetails" runat = "server"/>
Хорошо, да, вы правы, браузер является причиной, это только мое предположение, я отредактировал ответ, чтобы отразить это. Я воспроизвел на Chrome 75.0.3770.142 64-бит, Firefox 65.0 64-бит и Edge 42.17134.1.0.
Я добавил код программной части — контроллер отправляет все в виде строки. Я попытался изменить режим, и это ничего не меняет, поэтому я не решаюсь сказать, что это сервер. Я проверю скрипку, раньше не использовал, так что может быть очень полезно...
@washboardalex используйте Замените строковые переменные, замените двойные кавычки, одинарные кавычки, теги <, > пустыми строками. посмотрите, исправит ли это это.
asp:literal — это control, а не controller. следите за этим. контроллеры являются важными вещами в asp.net mvc, поэтому важно указать.
Попробуйте предварить свои строки знаком @. Если в строке встречается ключевое слово, без @ может возникнуть проблема. Пример: @"<div class='classname'>". Что-то определенно происходит в Control, но мы не видим, откуда берется строка.
Проблема была не в строке, не в браузере. Что-то идет по проводам из другого модуля на странице (мы используем DNN). Я удалил проблемный модуль, и теперь HTML отображается правильно. В настоящее время я фильтрую сетевой трафик с помощью блокировки запросов, чтобы изолировать причину, обновлю страницу с ответом, когда получу его.





Причиной в этом случае был некоторый javascript, удаляющий html как часть вставки данных после вызова AJAX:
var desc = $('#elemId').find('.more').text();
desc = desc.replace("(random data)", randomDataVar);
Метод обращался к внутреннему тексту, но после замены вставлял его обратно в innerHTML.
Я напрямую обратился к innerHTML, чтобы решить эту проблему:
var desc = document.getElementsByClassName('more')[0];
desc.innerHTML = desc.innerHTML.replace("(random data)", randomDataVar);
Вы смотрели, что загружается в ваш браузер с помощью такого инструмента, как Fiddler. Вы говорите, что браузер выполняет зачистку. Но это может быть где-то на сервере, или прокси, или... Это происходит только с одним браузером? Одна версия? Какой браузер, какая версия?