Вставить форматирование HTML в объект System.String в C # - PullRequest
1 голос
/ 23 декабря 2009

Как мне вставить форматирование HTML в объект String в 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 принимает либо (), (текст String), либо (текст String, значение String), и я использую последний.

Ответы [ 7 ]

9 голосов
/ 23 декабря 2009
String.Format("<b>{0}</b> - ({1})", c.DepartmentAbbr, c.DepartmentName)

Вот отличная ссылка на форматирование строки в C #:

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

4 голосов
/ 25 апреля 2012

Для тех, кто пытается сделать это в ASP.NET MVC ...

Это не работает:

<%=String.Format(resourceString, "<b>" & Model.UserName & "</b>")%>

Полужирные теги закодированы в HTML, как и следовало ожидать.

Тем не менее, это работает удовольствие:

<%=String.Format(resourceString, MvcHtmlString.Create("<b>" & Model.UserName & "</b>")%>
2 голосов
/ 22 апреля 2015
MvcHtmlString s = MvcHtmlString.Create(String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName));

Я думаю, вам лучше изменить объект String на объект MvcHtmlString.

1 голос
/ 23 декабря 2009

Я думаю, вы ищете способ получить объект 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 функция этого класса.

Это отвечает на ваш вопрос?

0 голосов
/ 23 декабря 2009

Поскольку я исследовал все больше и больше, я пришел к выводу, что то, что я хочу сделать, невозможно. Я использую RadComboBox для вставки элементов, но мне нужно сделать некоторые забавные вещи с LINQ на стороне сервера, чтобы я вставлял элементы в поле со списком, используя метод Items.Add, который принимает только System .String. Спасибо всем за вашу помощь и комментарии, но я думаю, что мне просто придется справиться с тем, что у меня есть в этом деле.

Вот еще несколько деталей, которые я не считал важными, но я думаю, что сейчас они должны быть.

Вот элемент управления, который я использую. ASPX код:

И я добавляю элементы к этому элементу управления, используя LINQ в C #: защищенная пустота Page_Load (отправитель объекта, EventArgs e) { if (! IsPostBack) { 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. К сожалению, для моей ситуации я не могу этого сделать, потому что это уже вызывало некоторые другие проблемы для меня, которые я, почему я делаю то, что я сейчас пытаюсь сделать.

0 голосов
/ 23 декабря 2009

Я думаю, что проблема в другом. Вы помещаете эту строку в элемент управления Label или Literal? Если это Лейбл, я полагаю, что он ускользает от текста. Поместите это в asp: буквальный контроль вместо этого. И, кстати, вам не нужно так часто вызывать .ToString (). Вы можете просто использовать:

"<b>" + c.DepartmentAbbr + "</b> - (" + c.DepartmentName + ")"

и ToString () по сути будет вызван для вас.

0 голосов
/ 23 декабря 2009

Если вы выводите это на веб-страницу - попробуйте использовать:

Server.HtmlEncode(string)
Server.HtmlDecode(string)

методы.

...