生成HTML文件的最简单方法是什么?

3
我是一名有用的助手,下面是您需要翻译的内容:

我正在开发一个控制台应用程序,它可以输出包含表格和可能包含一些javascript的html文档。

我考虑手写html:

streamWriter.WriteLine("<html>");
streamWriter.WriteLine("<body>");
streamWriter.WriteLine(GetHtmlTable());
streamWriter.WriteLine("</body>");
streamWriter.WriteLine("</html>");

...但是我想知道是否有更优雅的方法来做到这一点。可能类似于这样:

Page page = new Page();
GridView gridView = new GridView();
gridView.DataSource = GetDataTable();
gridView.DataBind();

page.Controls.Add(gridView);
page.RenderControl(htmlWriter);
htmlWriter.Flush();

假设我在正确的轨道上,使用System.Web.UI.Page类构建html文档的其余部分(即html、head、title、body元素)的正确方式是什么?我需要使用文字控件吗?

你可能会发现 System.Web.Mvc.HtmlHelper 很有用。 - odyss-jii
John,你能澄清一下你正在构建的应用程序是“控制台应用程序”还是“Web应用程序”吗? - MethodMan
你在第二个例子上走对了。我以前是这样做的(目前没有代码)。 - Split Your Infinity
2个回答

3
使用模板系统将展示和业务逻辑分离是一个好主意。您可以查看Razor Generator,它允许在非ASP.NET应用程序中使用CSHTML模板。 http://razorgenerator.codeplex.com/

2
我经常进行自动化的HTML页面生成。我喜欢创建一个带有自定义标签的HTML页面模板,用于插入动态控件、数据或文字。然后,我将模板文件读入字符串,并用生成的HTML替换自定义标签,就像您上面所做的那样,并将HTML文件从字符串中写回。这样可以节省我创建设计模板、CSS和支持JS的所有繁琐支持HTML的时间。
模板文件示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <CUSTOMHEAD />
    </head>
    <body>
        <CUSTOMDATAGRID />
    </body>
</html>

从字符串中加载模板文件创建HTML示例
    private void GenerateHTML(string TemplateFile, string OutputFileName)
    {

        string strTemplate = TemplateFile;
        string strHTMLPage = "";
        string strCurrentTag = "";

        int intStartIndex = 0;
        int intEndIndex = 0;


        while (strTemplate.IndexOf("<CUSTOM", intEndIndex) > -1)
        {
            intStartIndex = strTemplate.IndexOf("<CUSTOM", intEndIndex);

            strHTMLPage += strTemplate.Substring(intEndIndex, 
                                                 intStartIndex - intEndIndex);

            strCurrentTag = strTemplate.Substring(intStartIndex,
                 strTemplate.IndexOf("/>", intStartIndex) + 6 - intStartIndex);
            strCurrentTag = strCurrentTag.ToUpper();

            switch (strCurrentTag)
            {
                case "<CUSTOMHEAD />":
                    strHTMLPage += GenerateHeadJavascript();
                    break;

                case "<CUSTOMDATAGRID />":
                    StringWriter sw = new StringWriter();
                    GridView.RenderControl(new HtmlTextWriter(sw));
                    strHTMLPage += sw.ToString();
                    sw.Close();
                    break;

                case "<CUSTOMANYOTHERTAGSYOUMAKE />":
                    //strHTMLPage += YourControlsRenderedAsString();
                    break;

            }
            intEndIndex = strTemplate.IndexOf("/>", intStartIndex) + 2;
        }

        strHTMLPage += strTemplate.Substring(intEndIndex);

        try
        {
            StreamWriter swHTMLPage = new System.IO.StreamWriter(
                                                OutputFileName, false, Encoding.UTF8);
            swHTMLPage.Write(strHTMLPage);
            swHTMLPage.Close();
        }
        catch (Exception ex)
        {
            // AppendLog("Write File Failed: " + OutputFileName + " - " + ex.Message);
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接