Внедрение HTML-форматирования в систему.Строковый объект в C#
-
21-09-2019 - |
Вопрос
Как мне вставить форматирование HTML в строковый объект в C #?
Вот что у меня есть:
c.DepartmentAbbr.ToString() + " - (" + c.DepartmentName.ToString() + ")"
где c.DepartmentAbbr.toString() и c.DepartmentName.toString() - оба поля, выбираемые из контекста данных с помощью LINQ.
Вот чего я, по сути, хочу:
"<b>" + c.DepartmentAbbr.ToString() + "</b> - (" + c.DepartmentName.ToString() + ")"
так, чтобы первое слово было выделено жирным шрифтом.Выше просто показан буквальный текст с выделенными жирным шрифтом тегами и все такое.Я предполагаю, что мне нужно будет использовать String.Format, но я не могу найти хороший пример, который помог бы мне понять, как использовать его, чтобы делать то, что я хочу.
Обновить
Вот еще несколько деталей, которые я не считал важными, но я думаю, что к настоящему времени они должны быть.
Вот элемент управления, который я использую.ASPX - код:
<telerik:RadComboBox ID="rcbDepartments" runat="server" AppendDataBoundItems="True"
AutoPostBack="true" NoWrap="true" Width="250px">
<Items>
<telerik:RadComboBoxItem Text="All Departments" Value="-1" />
</Items>
</telerik:RadComboBox>
И я добавляю элементы в этот элемент управления, используя LINQ на C#:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var abbr = from c in DB.Departments
where c.DepartmentAbbr != "BInst"
select c;
foreach (var c in abbr)
{
String s = String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName);
rcbDepartments.Items.Add(new RadComboBoxItem(s, c.DepartmentID.ToString()));
}
}
}
Объект RadComboBoxItem принимает либо (), (Строковый текст), либо (Строковый текст, строковое значение), и я использую последнее.
Решение 6
По мере того как я исследовал все больше и больше, я в значительной степени пришел к выводу, что то, что я хочу сделать, невозможно.Я использую RadComboBox для вставки элементов, но мне приходится выполнять некоторые функциональные действия с LINQ на стороне сервера, так что я должен вставлять элементы в поле со списком, используя Элементы.Добавить метод, который принимает только System.Строку.Спасибо вам всем за вашу помощь и комментарии, но я думаю, что мне просто придется довольствоваться тем, что у меня есть в этом случае.
Вот еще несколько деталей, которые я не считал важными, но я думаю, что к настоящему времени они должны быть.
Вот элемент управления, который я использую.ASPX - код:
И я добавляю элементы в этот элемент управления, используя LINQ на C#:защищенная пустая страница_загрузки (отправитель объекта, EventArgs e) { if (!Является обратной отправкой) { var abbr = из c в DB.Departments где c.DepartmentAbbr != "BInst" выберите c;
foreach (var c in abbr)
{
String s = String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName);
rcbDepartments.Items.Add(new RadComboBoxItem(s, c.DepartmentID.ToString()));
}
}
}
Объект RadComboBoxItem принимает либо (), (Строковый текст), либо (Строковый текст, строковое значение), и я использую последнее.К настоящему времени я почти уверен, что из-за ограничений на RadComboBoxItem, принимающих только строки, я не могу выполнять форматирование HTML для элементов без использования тегов шаблона элемента в ASPX.К сожалению, в моей ситуации я не могу этого сделать, потому что это уже вызвало у меня некоторые другие проблемы, поэтому я и делаю то, что сейчас пытаюсь сделать.
Другие советы
String.Format("<b>{0}</b> - ({1})", c.DepartmentAbbr, c.DepartmentName)
Вот отличная ссылка на форматирование строк в C#:
Для всех, кто пытается сделать это в ASP.NET MVC...
Это не сработает:
<%=String.Format(resourceString, "<b>" & Model.UserName & "</b>")%>
Выделенные жирным шрифтом теги закодированы в HTML, как и следовало ожидать.
Тем не менее, это доставляет удовольствие:
<%=String.Format(resourceString, MvcHtmlString.Create("<b>" & Model.UserName & "</b>")%>
MvcHtmlString s = MvcHtmlString.Create(String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName));
Я думаю, вам лучше изменить строку s на объект MvcHtmlString .
Я предполагаю, что вы ищете способ получить объект c
чтобы выдать строку в формате HTML.
Возьмем это в качестве примера:
public class myExample : IFormattable{ private string myExampleStr; public myExample(string sampleStr){ this.myExampleStr = sampleStr; } /* Implement an Equals() function - OVERRIDE! */ public override bool Equal(object obj){ return true; } /* Implement an ToString() function - OVERRIDE */ public override string ToString(){ return this.myExampleStr; } /* Implement an GetHashCode() function - OVERRIDE */ public override int GetHashCode(){ return this.myExampleStr.GetHashCode(); } /* Here we implement the IFormattable interface */ public string ToString(string format) { return this.ToString(format, null); } public string ToString(IFormatProvider formatProvider) { return this.ToString(null, formatProvider); } public string ToString(string format, IFormatProvider formatProvider) { if (string.IsNullOrEmpty(format)) format = "G"; if (formatProvider != null) { ICustomFormatter formatter = formatProvider.GetFormat(this.GetType()) as ICustomFormatter; if (formatter != null) return formatter.Format(format, this, formatProvider); } switch (format) { case "b": return string.Format("<b>{0}</b>", this.myExampleStr); case "i": return string.Format("<i>{0}</i>", this.myExampleStr); default: return this.myExampleStr; } } }
И предположим, что мы создали экземпляр этого класса следующим образом:
myExample example = new myExample("tommieb75");
И выдать простой ToString()
вызовите объект, чтобы распечатать HTML-тег для выделения жирным шрифтом, как показано ниже
Console.WriteLine("{0}", example.ToString("b")); // Output would be <b>tommieb75</b>
Этот пример служит для иллюстрации того, как использовать пользовательский параметр для ToString()
метод, позволяющий использовать встроенные HTML-теги, выделенные жирным шрифтом или курсивом, или любой другой способ форматирования значения на основе параметра, используемого для ToString
функция этого класса.
Отвечает ли это на ваш вопрос?
Я думаю, что проблема где-то в другом.Вы помещаете эту строку в элемент управления Label или в элемент управления Literal?Если это Ярлык, я полагаю, что он ускользает от текста для вас.Вместо этого поместите это в asp:Literal control.И, кстати, вам не нужно вызывать .toString() так часто.Вы можете просто использовать:
"<b>" + c.DepartmentAbbr + "</b> - (" + c.DepartmentName + ")"
и toString(), по сути, будет вызвана для вас.
Если вы выводите это на веб-странице - попробуйте использовать:
Server.HtmlEncode(string)
Server.HtmlDecode(string)
методы.