Внедрение HTML-форматирования в систему.Строковый объект в C#

StackOverflow https://stackoverflow.com/questions/1949911

Вопрос

Как мне вставить форматирование 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#:

http://blog.stevex.net/string-formatting-in-csharp/

Для всех, кто пытается сделать это в 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)

методы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top