English 中文(简体)
Sticking HTML formatting into System.String object in C#
原标题:

How do I stick HTML formatting into a String object in C#?

Here s what I have:

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

where c.DepartmentAbbr.ToString() and c.DepartmentName.ToString() are both fields being selected from a data context using LINQ.

Here s what I essentially want:

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

so that the first word shows up in bold. The above just shows the literal text with the bold tags and everything. I assume I will need to use String.Format but I can t quite find a good example that helps me know how to use it to do what I want.

Update

Here are a few more details that I didn t think were important but I think by now they must be.

Here is the control I m using. ASPX code:

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

And I m adding items to this control using LINQ in 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()));
        }
    }
}

The RadComboBoxItem object accepts either (), (String text), or (String text, String value), and I am using the latter.

最佳回答

As I ve researched more and more I ve pretty much come to the conclusion that what I want to do is not possible. I m using a RadComboBox to stick the items into, but I m having to do some funcky stuff with LINQ on the server side such that I have to stick the items into the combo box using the Items.Add method which only accepts System.String. Thank you all for your help and comments but I think I m just going to have to make do with what I have in this case.

Here are a few more details that I didn t think were important but I think by now they must be.

Here is the control I m using. ASPX code:

And I m adding items to this control using LINQ in 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()));
        }
    }
}

The RadComboBoxItem object accepts either (), (String text), or (String text, String value), and I am using the latter. I am pretty sure by now that due to the restrictions on the RadComboBoxItem only accepting Strings that I can not do HTML formatting on the items without using the Item Template tags in ASPX. Unfortunately for my situation I can not do this because that was already causing some other problems for me which I why I m doing what I am currently trying to do.

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

Here is a great reference to string formatting in C#:

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

For anyone trying to do this in ASP.NET MVC...

This doesn t work:

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

The bold tags are HTML encoded, as you d expect.

However, this works a treat:

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

I think you better change the String s to MvcHtmlString object.

I guess you are looking for a way to have the object c to spit out a HTML formatted string.

Take this as an example:

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

And suppose we instantiated this class like this:

myExample example = new myExample("tommieb75");

And issue a simple ToString() call on the object to print out a HTML tag for bold as shown below

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

This example serves to illustrate how to use a custom parameter to the ToString() method so that you can use bold or italic HTML tags embedded, or any other way of formatting a value based on the parameter used for the ToString function of this class.

Does this answer your question?

I think the problem is somewhere else. Are you putting this string in a Label control or a Literal control? If it s a Label, I believe it s escaping the text for you. Put it in an asp:Literal control instead. And btw, you don t need to call .ToString() so much. You can just use:

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

and ToString() will essentially be called for you.

If you re outputting this on a webpage - try using the:

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

methods.





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签