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要素)を構築する適切な方法は何ですか?リテラルコントロールを使用する必要がありますか?

4

2 に答える 2

3

テンプレート システムを使用して、プレゼンテーションとビジネス ロジックを分離することをお勧めします。

非 ASP.NET アプリケーション内で CSHTML テンプレートを使用できるようにする Razor Generator を見てください。

http://razorgenerator.codeplex.com/

于 2013-01-23T16:41:13.833 に答える
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);
        }
    }
于 2013-01-23T16:42:55.407 に答える