Всем привет! Есть сайт на asp mvc и простенький html редактор, для ввода форматированного текста и вставки картинок. Появилась необходимость чтобы вставленные картинки увеличивались (lightbox), для этого нужно вместо картинки сделать ссылку картинки с определенным атрибутом. Вот как пытаюсь изменить готовый хтмл текст:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(recordBL.Text); //recordBL.Text - тут хтмл текст
System.Text.StringBuilder txt = new System.Text.StringBuilder(recordBL.Text);
var nodes = doc.DocumentNode.SelectNodes(@"//img[@src]");
foreach (var img in nodes)
{
HtmlAgilityPack.HtmlAttribute att = img.Attributes["src"];
imgScrs.Add(att.Value);
//формирую нужную ссылку/картинку
string readyLink = "<a href='" + att.Value + "' data-lightbox='lightbox-set'><img src='" + att.Value + "'/></a>",
//это старая картинка
old = img.OuterHtml;
//и тут нужно заменить старую картинку, новой сформированной ссылкой-картинкой
recordBL.Text = txt.Replace(old, readyLink).ToString();
}
но Replace не отрабатывает, вероятно потому, что в old в дебаге при просмотре значения (клик на лупу) - old =
<img alt="" height="367" src="http://localhost:11733/Images/USERDATA/Posts/10-2017/u2t11102003.jpg" width="550">
а при просмотре без клика на лупу -
joxi.ru/eAO4DQC4qbNpro
то есть экранируются двойные кавычки... других вариантов почему реплейс не отрабатывает нет
эти танцы с бубном можно и на стороне клиента через js сделать, но в js к сожалению не силен
---------UP
еще такой вариант:
string readyLink = "a href=\"" + att.Value + "\" data-lightbox=\"lightbox-set\"><img src=\"" + att.Value + "\"/></a",
old = img.OuterHtml.ToString();
HtmlAgilityPack.HtmlNode aaa = doc.CreateElement(readyLink);
img.ParentNode.ReplaceChild(aaa, img);
recordBL.Text = doc.DocumentNode.OuterHtml;
но создаются две ссылки, вместо одной, видать родителя нет, так как я выбираю только картинки - var nodes = doc.DocumentNode.SelectNodes(@"//img[@src]");