public ContentResult Index() { StringWriter writer = new StringWriter(); myXmlDocument.Save(writer); return this.Content(writer.ToString(), @"text/xml", writer.Encoding); }
But no luck; IE7's CSS would not display the XML since IIS ASP.NET defaults to UTF-16 and the previous page was UTF-8? Yes, both pages were correctly tagged with there encoding and correctly identified by IE as UTF-8 or UTF-16. It just wouldn't process the later. Whats up with that; can't these MS kids get along. So did a search and found a soluiton posted by Robert McLaw using a modified StringWriter that accepted an encoding which would worked very nicely:
public class StringWriterWithEncoding : StringWriter { Encoding encoding; public StringWriterWithEncoding(Encoding encoding) { this.encoding = encoding; } public override Encoding Encoding { get { return encoding; } } }
To implement, just use the new writer and set it's encoding as desired:
public ContentResult Index() { StringWriterWithEncoding writer = new StringWriterWithEncoding(Encoding.UTF8); myXmlDocument.Save(writer); return this.Content(writer.ToString(), @"text/xml", writer.Encoding); }
The advantatage of using the StringWriterWithEncoding method over a custom view is that the code can be used in other, non HTML based applications for consistency.