Имам код като този. Има ли начин да се улесни писането и поддържането? Използване на C # .NET 3.5.
string header(string title)
{
StringWriter s = new StringWriter();
s.WriteLine("{0}","<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">");
s.WriteLine("{0}", "<html>");
s.WriteLine("<title>{0}</title>", title);
s.WriteLine("{0}","<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">");
s.WriteLine("{0}", "</head>");
s.WriteLine("{0}", "<body>");
s.WriteLine("{0}", "");
}
Бих могъл и просто да напиша:
s.WriteLine("{0}", @"blah blah
many
new
lines
blah UHY#$&_#$_*@Y KSDSD<>\t\t\t\t\t\tt\t\t\\\t\t\t\t\\\h\th'\h't\th
hi
done");
Ще работи, но трябва да подменя всички"
с""
.
Всички отговори
Вероятно е по-добре да използвате
HtmlTextWriter
или anXMLWriter
отколкото равнинаStringWriter
. Те ще се погрижат да избягат вместо вас, както и да се уверят, че документът е добре оформен.Тази страницапоказва основите на използването на
HtmlTextWriter
клас, същността на който е:Когато се справя с този проблем на други езици, отивам за разделяне на кода и HTML. Нещо като:
1.) Създайте HTML шаблон. използване
[varname]
заместители за маркиране на заменено / вмъкнато съдържание.2.) Попълнете променливите на вашия шаблон от масив или структура / картографиране / речник
Знам, че сте питали за C #, но ако желаете да използвате който и да е език .Net, горещо препоръчвам Visual Basic за точно този проблем. Visual Basic има функция, наречена XML Literals, която ще ви позволи да пишете код по този начин.
Това ви позволява да пишете прав HTML с дупки в изрази в стария ASP стил и прави кода ви супер четим. За съжаление тази функция не е в C #, но можете да напишете един модул във VB и да го добавите като препратка към вашия C # проект.
Писането в Visual Studio също позволява правилно отстъп за повечето XML литерали и цели изрази. Вдлъбнатината за дупките за израз е по-добра във VS2010.
Използвайте
XDocument
за да създадете DOM, след това го запишете с помощта наXmlWriter
. Това ще ви даде чудесно кратка и четлива нотация, както и добре форматиран изход.Вземете тази примерна програма:
Това генерира следния изход:
Можете да използвате
System.Xml.Linq
обекти. Те бяха напълно преработени от старитеSystem.Xml
дни, които направиха изграждането на XML от нулата наистина досадно.Освен доктипа, предполагам, лесно бихте могли да направите нещо като:
Най-правният начин е да се използва обект XmlWriter. Това може да се използва за създаване на валиден HTML и ще се погрижи за всички гадни последователности за бягство за вас.
Можеш да използвашT4 Шаблониза генериране на Html (или който и да е) от вашия код. виж това:http://msdn.microsoft.com/en-us/library/ee844259.aspx
Ако искате да създадете HTML документ, подобен на начина, по който бихте създали XML документ в C #, можете да опитате библиотеката с отворен код на Microsoft,Html Agility Pack.
Той осигурява обект HtmlDocument, който има много подобен API на
System.Xml.XmlDocument
клас.Можете да използвате ASP.NET, за да генерирате своя HTML извън контекста на уеб страниците.Ето една статиякоето показва как може да се направи.
Бихте могли да използвате някои библиотеки с отворен код на трети страни, за да генерирате силен типизиран (X) HTML, като напримерCityLizard Frameworkили Sharp DOM.
АктуализиранеНапример
Това обаче не е общо решение, ако целта ви е да имате или поддържате шаблони за имейли, тогава System.Web има вграден клас, нареченMailDefinition. Този клас се използва от контролите за членство в ASP.NET за създаване на HTML имейли.
Същият вид „низ“ ли замества нещата, както е споменато по-горе, но пакетира всичко в MailMessage за вас.
Ето пример от MSDN:
С въвеждането на Razor в ASP.net MVC, най-добрият начин да пишете HTML в C # е с Razor Engine.
Шаблон:
За пълна проба вижтетук
Можете да напишете свои собствени класове с неговия метод Render и други атрибути, за да избегнете голяма бъркотия, ако го използвате много, а след това да използвате и HTMLWriter или xmlwriter. Тази логика се използва в страниците asp.net, можете да наследявате от webControl и да заменитеметод за рендиране, което е чудесно, ако разработвате контроли от страна на сървъра.
Товаможе да бъде добър пример.
за разбирането
Наистина зависи за какво се стремите и по-конкретно какъв вид представление наистина трябва да предложите.
Виждал съм възхитителни решения за силно типизирана разработка на HTML (цялостни модели за управление, било то ASP.NET Web Controls или подобни на него), които просто добавят невероятна сложност към проект. В други ситуации е перфектно.
По ред на предпочитанията в света на C #,
Написах тези класове, които ми послужиха добре. Това е просто, но прагматично.
HSharp е библиотека, използвана за лесно и бързо анализиране на езика за маркиране като HTML. Инсталирай:
PM> Install-Package Obisoft.HSharp
и изход:
Търсих нещо, което приличаше на jquery за генериране на dom в C # (не е необходимо да анализирам). За съжаление няма късмет в намирането на леко решение, затова създадох този прост клас, който е наследен от System.Xml.Linq.XElement. Ключовата характеристика е, че можете да веригирате оператора, както когато използвате jquery в javascript, така че да е по-плавен. Той не е напълно представен, но прави това, от което се нуждая, и ако има интерес, мога да започна git.
Пример:
изход от горния код:
Leave a Reply