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 l开发者_高级运维atter.
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.
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.
If you're outputting this on a webpage - try using the:
Server.HtmlEncode(string)
Server.HtmlDecode(string)
methods.
精彩评论