我有这样的代码。有没有一种方法可以使编写和维护变得更容易?使用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
或XMLWriter
比平原StringWriter
。他们将为您进行转义,并确保文档格式正确。这一页显示了使用
HtmlTextWriter
类,其要旨是:当我用其他语言处理此问题时,我会将代码和HTML分开。就像是:
1.)创建一个HTML模板。采用
[varname]
占位符以标记替换/插入的内容。2.)从数组或结构/映射/字典中填充模板变量
我知道您问过有关C#的问题,但是如果您愿意使用任何.Net语言,那么我强烈建议Visual Basic解决此确切问题。 Visual Basic具有称为XML文字的功能,该功能使您可以编写这样的代码。
这使您可以使用旧的ASP样式编写带有表达孔的纯HTML,并使代码具有更高的可读性。不幸的是,此功能不在C#中,但是您可以在VB中编写一个模块并将其添加为对C#项目的引用。
在Visual Studio中编写代码还可以对大多数XML文字和表达式整体进行适当的缩进。在VS2010中,表达孔的缩进效果更好。
使用
XDocument
创建DOM,然后使用XmlWriter
。这将为您提供一个极简明易懂的符号以及格式精美的输出。采取以下示例程序:
这将产生以下输出:
你可以用
System.Xml.Linq
对象。他们是完全从旧的重新设计System.Xml
从头开始构建XML的日子真令人讨厌。除了我猜的文档类型,您还可以轻松地执行以下操作:
最直接的方法是使用XmlWriter对象。这可以用来产生有效的HTML,并为您处理所有讨厌的转义序列。
您可以使用T4模板用于从您的代码生成HTML(或任何HTML)。看到这个:http://msdn.microsoft.com/en-us/library/ee844259.aspx
如果您要创建类似于在C#中创建XML文档的HTML文档,则可以尝试使用Microsoft的开源库,HTML敏捷包.
它提供了一个HtmlDocument对象,该对象的API与
System.Xml.XmlDocument
类。您可以使用ASP.NET在网页上下文之外生成HTML。这是一篇文章展示了如何做到这一点。
您可以使用一些第三方开源库来生成强类型的已验证(X)HTML,例如CityLizard框架或Sharp DOM。
更新资料例如
这不是通用解决方案,但是,如果您的目的是拥有或维护电子邮件模板,则System.Web具有一个内置类,称为邮件定义。 ASP.NET成员资格控件使用此类来创建HTML电子邮件。
执行与上述相同的“字符串替换”操作,但是将它们全部打包到您的MailMessage中。
这是来自MSDN的示例:
随着ASP.net MVC中Razor的引入,用C#编写HTML的最佳方法是使用Razor Engine。
模板:
有关完整示例,请参见这里
您可以使用其Render方法和另一个属性来编写自己的类,以免在大量使用时造成麻烦,然后再使用HTMLWriter或xmlwriter。在asp.net页面中使用了此逻辑,您可以从webControl继承并覆盖渲染方法,如果您正在开发服务器端控件,那将非常有用。
这个可能是一个很好的例子。
问候
这实际上取决于您要追求的目标,尤其取决于您真正需要提供什么样的性能。
我已经看到了用于强类型HTML开发(完整的控件模型,无论是ASP.NET Web控件还是类似控件)的令人称赞的解决方案,这些解决方案给项目增加了惊人的复杂性。在其他情况下,它是完美的。
按照C#领域的偏好,
我写了这些课程,对我很有帮助。简单但实用。
HSharp是用于轻松快速地分析诸如HTML之类的标记语言的库。安装:
PM> Install-Package Obisoft.HSharp
并输出:
我正在寻找某种看起来像jquery的东西,以在C#中生成dom(我不需要解析)。不幸的是,要找到一个轻量级的解决方案没有运气,所以我创建了一个从System.Xml.Linq.XElement继承的简单类。关键功能是,您可以像在javascript中使用jquery一样链接操作符,从而使操作更流畅。它的功能不完全,但是可以满足我的需要,如果有兴趣,我可以启动git。
样品:
以上代码的输出:
Leave a Reply