2013-01-23 68 views
3

我正在开发一个应用程序应用程序,它应该吐出一个包含表格的javascript文档。什么是在非ASP.NET应用程序中生成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(); 

假设我在正确的轨道上,有什么建的HTML文档的其余部分的正确方法:使用System.Web.UI.Page类(即HTML,头,标题,正文元素) ?我是否需要使用文字控制?

+0

您可能会发现'System.Web.Mvc.HtmlHelper'是有用的。 –

+0

John你能澄清一下你正在构建这个应用程序吗?它是'Console App'还是'Web App' – MethodMan

+0

你在第二个例子中走在了正确的轨道上。我之前做过这样的事情(不要在我的atm上有代码)。 –

回答

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); 
     } 
    } 
2

使用模板系统来分离演示文稿和业务逻辑将是一个好主意。

看看Razor Generator,它允许在非ASP.NET应用程序中使用CSHTML模板。

http://razorgenerator.codeplex.com/

相关问题