Pergunta

Como faço para enfiar a formatação HTML em um objeto String em C#?

Aqui está o que eu tenho:

c.DepartmentAbbr.ToString() + " - (" + c.DepartmentName.ToString() + ")"

onde c.Departmentabbr.ToString () e C.DepartmentName.ToString () estão sendo selecionados a partir de um contexto de dados usando LINQ.

Aqui está o que eu essencialmente quero:

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

para que a primeira palavra apareça em negrito. O acima mostra apenas o texto literal com as etiquetas ousadas e tudo mais. Suponho que precisarei usar String.Format, mas não consigo encontrar um bom exemplo que me ajude a saber como usá -lo para fazer o que eu quiser.

Atualizar

Aqui estão mais alguns detalhes que eu não eram importantes, mas acho que agora eles devem ser.

Aqui está o controle que estou usando. Código 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>

E estou adicionando itens a este controle usando o LINQ em 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()));
        }
    }
}

O objeto RadComboboxItem aceita (), (texto da string) ou (texto da string, valor da string) e estou usando o último.

Foi útil?

Solução 6

À medida que pesquisei cada vez mais, cheguei à conclusão de que o que quero fazer não é possível. Estou usando um Radcombobox para enfiar os itens, mas estou tendo que fazer algumas coisas funcky com o LINQ no lado do servidor, de modo que tenho que enfiar os itens na caixa de combinação usando o método items.add que aceita apenas o sistema .Corda. Obrigado a todos pela sua ajuda e comentários, mas acho que vou ter que me contentar com o que tenho neste caso.

Aqui estão mais alguns detalhes que eu não eram importantes, mas acho que agora eles devem ser.

Aqui está o controle que estou usando. Código ASPX:

E estou adicionando itens a esse controle usando LINQ em C#: Protected void Page_load (remetente do objeto, EventArgs e) {if (! ISPostback) {var abbr = de C em db.Departamentos onde 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()));
        }
    }
}

O objeto RadComboboxItem aceita (), (texto da string) ou (texto da string, valor da string) e estou usando o último. Agora tenho certeza de que, devido às restrições ao RadcomboBoxitem, aceitando apenas strings que eu não posso fazer formatação HTML nos itens sem usar as tags do modelo de item no ASPX. Infelizmente, para a minha situação, não posso fazer isso, porque isso já estava causando outros problemas para mim, pelo que estou fazendo o que estou tentando fazer.

Outras dicas

String.Format("<b>{0}</b> - ({1})", c.DepartmentAbbr, c.DepartmentName)

Aqui está uma ótima referência à formatação de strings em C#:

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

Para quem tenta fazer isso em ASP.NET MVC...

Isso não funciona:

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

As etiquetas em negrito são codificadas em HTML, como seria de esperar.

No entanto, isso funciona um deleite:

<%=String.Format(resourceString, MvcHtmlString.Create("<b>" & Model.UserName & "</b>")%>
MvcHtmlString s = MvcHtmlString.Create(String.Format("{0} - ({1})", c.DepartmentAbbr, c.DepartmentName));

Eu acho que é melhor você alterar as strings s para o objeto mvchtmlstring.

Eu acho que você está procurando uma maneira de ter o objeto c Para cuspir uma sequência formatada HTML.

Tome isso como um exemplo:

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;
      }
   }
}

E suponha que instanciemos esta classe como esta:

myExample example = new myExample("tommieb75");

E emitir um simples ToString() Ligue para o objeto para imprimir uma tag html para negrito, como mostrado abaixo

Console.WriteLine("{0}", example.ToString("b"));
// Output would be <b>tommieb75</b>

Este exemplo serve para ilustrar como usar um parâmetro personalizado para o ToString() método para que você possa usar tags html em negrito ou itálico incorporadas ou qualquer outra maneira de formatar um valor com base no parâmetro usado para o ToString função desta classe.

Isso responde sua pergunta?

Eu acho que o problema está em outro lugar. Você está colocando essa string em um controle de etiqueta ou controle literal? Se for uma gravadora, acredito que está escapando do texto para você. Coloque -o em um ASP: controle literal. E btw, você não precisa ligar para .toString () muito. Você pode simplesmente usar:

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

e ToString () será essencialmente chamado para você.

Se você estiver emitindo isso em uma página da web - tente usar o:

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

métodos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top