Pregunta

¿Cómo continúo el formato HTML en un objeto String en C #?

Esto es lo que tengo:

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

donde c.DepartmentAbbr.ToString () y c.DepartmentName.ToString () están ambos campos se seleccionan de un contexto de datos usando LINQ.

Esto es lo que quiero esencialmente:

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

de manera que la primera palabra aparece en negrita. Lo anterior solo muestra el texto literal de las etiquetas de negrita y todo. Asumo que tendrá que utilizar String.Format pero no puedo encontrar un buen ejemplo que me ayuda a saber cómo usarlo para hacer lo que quiera.

Actualizar

Aquí hay algunos detalles más que yo no creía que fuera importante, pero creo que por ahora deben ser.

Este es el control que estoy 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>

Y estoy añadiendo elementos a este control utilizando LINQ en 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()));
        }
    }
}

El objeto RadComboBoxItem acepta ya sea (), (cadena de texto), o (texto String, valor de cadena), y estoy usando este último.

¿Fue útil?

Solución 6

Como he investigado más y más He casi llegado a la conclusión de que lo que quiero hacer no es posible. Estoy usando un RadComboBox para pegar los elementos en, pero estoy teniendo que hacer algunas cosas Funcky con LINQ en el lado del servidor de manera que tengo que pegar los elementos en el cuadro combinado utilizando el método Items.Add que sólo acepta Sistema .Cuerda. Gracias a todos por su ayuda y comentarios, pero creo que sólo voy a tener que conformarse con lo que tengo en este caso.

Aquí hay algunos detalles más que yo no creía que fuera importante, pero creo que por ahora deben ser.

Este es el control que estoy usando. código ASPX:                                                          

Y estoy añadiendo elementos a este control utilizando LINQ en C #:     protegida void Page_Load (object sender, EventArgs e)     {         if (! IsPostBack)         {             var abbr = de c en DB.Departments                        donde c.DepartmentAbbr! = "Binst"                        seleccionar 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()));
        }
    }
}

El objeto RadComboBoxItem acepta ya sea (), (texto String), o (texto String, valor de cadena), y estoy usando este último. Estoy bastante seguro de que ahora que, debido a las restricciones en los RadComboBoxItem sólo cadenas aceptar que no puedo hacer el formato HTML en los artículos sin necesidad de utilizar las etiquetas de plantilla de elementos en ASPX. Por desgracia para mi situación no puedo hacer esto porque que ya estaba causando algunos otros problemas para mí, que yo por qué estoy haciendo lo que estoy actualmente tratando de hacer.

Otros consejos

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

Aquí está una gran referencia para el formato de cadenas en C #:

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

Para cualquier persona que intenta hacer esto en ASP.NET MVC ...

Esto no funciona:

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

Las etiquetas de negrita están codificados en HTML, como era de esperar.

Sin embargo, esto funciona un convite:

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

Creo que es mejor cambiar la cadena s de MvcHtmlString objeto.

Creo que se está buscando una manera de tener la c objeto de escupir una cadena con formato HTML.

Tome esto como un ejemplo:

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

Y supongamos que crea una instancia de esta clase como esta:

myExample example = new myExample("tommieb75");

Y emitir una simple llamada ToString() sobre el objeto a imprimir una etiqueta HTML para negrita, como se muestra a continuación

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

Este ejemplo sirve para ilustrar cómo utilizar un parámetro personalizado con el método ToString() para que pueda utilizar las etiquetas en negrita o cursiva HTML incrustado, o cualquier otra forma de dar formato a un valor en función del parámetro que se utiliza para la función ToString de esta clase .

¿Responde esto a su pregunta?

Creo que el problema está en otra parte. ¿Usted está poniendo esta cadena en un control Label o un control literal? Si se trata de una etiqueta, creo que se escape el texto para usted. Ponerlo en un asp: control literal en su lugar. Y por cierto, no es necesario llamar a .ToString () tanto. Usted sólo puede usar:

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

y ToString () será esencialmente ser llamado para usted.

Si va a dar salida a este en una página web - intente utilizar el:

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

métodos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top