Как визуализировать декодированный HTML в (например, a) в ячейке GridView
Я привязываю GridView к запросу LINQ. Некоторые из полей в объектах, созданных оператором LINQ, являются строками и должны содержать новые строки.
По-видимому, GridView HTML-кодирует все в каждой ячейке, поэтому я не могу вставить < br/ > для создания новой строки внутри ячейки.
Как сообщить GridView не HTML кодировать содержимое ячеек?
Может быть, я должен использовать другой элемент управления?
Ответы
Ответ 1
Можете ли вы подписаться на событие RowDataBound? Если вы можете, вы можете запустить:
if (e.Row.RowType == DataControlRowType.DataRow)
{
string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[0].Text);
e.Row.Cells[0].Text = decodedText;
}
Ответ 2
Как установить HtmlEncode
свойство на false
? Для меня это намного проще.
<asp:BoundField DataField="MyColumn" HtmlEncode="False" />
Ответ 3
Сохранены ли нормальные строки в выводе? Если это так, вы можете отправить новые строки и использовать стиль css white-space: pre
, который сохранит новые строки, пробелы и вкладки.
Ответ 4
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
e.Row.Cells[i].Text = decodedText;
}
}
}
Ответ 5
Я обошел это, предварительно вставив данные в таблицу sql-server из многострочного текстового поля, используя
replace (txt = Replace(txt, vbCrLf,"<br />"))
Затем я использовал решение Ray Booysen, чтобы вернуть его в gridview:
Protected Sub grdHist_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdHist.RowDataBound
Dim col1 As String = HttpUtility.HtmlDecode(e.Row.Cells(2).Text)
e.Row.Cells(2).Text = col1
End Sub
Ответ 6
Ответ Booysen работает, но только для одного столбца. Если вы запустите цикл в событии RowDataBound, вы можете заменить переменную для [0] и выполнить эту работу для каждого столбца, если хотите. Вот что я сделал:
protected void gridCart_RowDataBound(object sender, GridViewRowEventArgs e)
{
for (int i = 1; i < 4; i++)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string decode = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
e.Row.Cells[i].Text = decode;
}
}
}
Шахта намеренно начинается с 1 из-за моих данных, но, очевидно, она будет работать с тем, что вам нужно.
Ответ 7
protected void gvHead_OnRowDataBound(object sender, GridViewRowEventArgs e) {
for (int i = 0; i < e.Row.Cells.Count; i++)
e.Row.Cells[i].Text = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
}
Ответ 8
Вам необходимо привязать к событию DataBoundGrid и изменить рендеринг для столбцов, которые вы хотите отобразить HTML-код.
public event EventHandler DataBoundGrid {
add { ctlOverviewGridView.DataBound += value; }
remove { ctlOverviewGridView.DataBound -= value; }
}
ctlOverview.DataBoundGrid += (sender, args) => {
((sender as ASPxGridView).Columns["YourColumnName"] as GridViewDataTextColumn).PropertiesTextEdit.EncodeHtml = false;
};
Ответ 9
Ответы @Ray Booysen
верны, но в некоторых случаях HtmlDecode() не может справиться с вашей проблемой. вы можете использовать UrlDecode() вместо HtmlDecode().
вот еще одно решение:
if (e.Row.RowType == DataControlRowType.DataRow)
{
string decodedText = HttpUtility.UrlDecode(e.Row.Cells[0].Text);
e.Row.Cells[0].Text = decodedText;
}