将POCO绑定到html文档并将结果生成为字符串

时间:2009-10-16 20:00:45

标签: c# .net html data-binding

我试图从类库中的方法返回一个html字符串(不要问为什么)。我想在该方法中做的是从我的域中获取POCO的实例,然后打开一个html文档(可能来自一个文件,或者它可能是来自其他地方的字符串),然后将POCO传递给文档(绑定到POCOs属性),然后输出生成的html。

是否有一个很好的包装器可以在.NET框架中完成这项工作?我在HtmlDocument类上看到了这篇文章,但希望避免所有直接元素访问和赋值:

http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx

2 个答案:

答案 0 :(得分:0)

我的整体方法是使用适当的XML Serializer(DataContractSerializer或XmlSerializer)传递您的可序列化 POCO in,收到生成的XML;并使用XSLT样式表转换它以生成输出HTML。

转换管道看起来像这样

POCO ---- [XmlSerializer] - > XML ------- [XSLT] -----> HTML

答案 1 :(得分:0)

您可以使用模板引擎来实现此目的。第一步是定义包含对象属性值的占位符的HTML模板。然后使用模板和一个将产生最终结果的对象来提供模板引擎。以下是使用NVelocity的示例:

class Program
{
    static void Main(string[] args)
    {
        Velocity.Init();

        // Define a template that will represent your HTML structure.
        var template = "<html><body><div>$key1</div><div>$key2.ToString('dd/MM/yyyy')</div></body></html>";
        var context = new VelocityContext();
        // The values you are passing here could be complex objects with many properties 
        context.Put("key1", "Hello World");
        context.Put("key2", DateTime.Now);
        var sb = new StringBuilder();
        using (var writer = new StringWriter(sb))
        using (var reader = new StringReader(template))
        {
            Velocity.Evaluate(context, writer, null, reader);
        }
        Console.WriteLine(sb.ToString());
        // This will print: <html><body><div>Hello World</div><div>16/10/2009</div></body></html>
    }
}