ASP.NET:动态生成HTML,如何?

时间:2009-09-11 06:15:23

标签: c# asp.net javascript dynamic

去年我一直在做一些(开启和关闭)ASP.NET,但我从来没有遇到过这个挑战:我现在正在建立一个非常简单的网站,主要是基于HTML和Javascript。但是,在一个页面上,我需要从服务器读取XML文件,解析它,从XML文件中包含的值创建HTML,并将其作为响应输出。我将使用带有C#的ASP.NET。我理解如何解析XML并在C#中生成HTML代码,但是如何将HTML代码写入响应/页面?生成的动态HTML仅在页面中的一个大div中,而页面的其余部分是静态的。做这个的最好方式是什么?因为我以前从未做过这样的事情,所以我猜测一种方法是清除页面的整个HTML源代码并使用Page_Load事件中的Response.Write()来编写整个HTML页面,已插入XML值。这是正确的方法,如果是这样的话,你可以给我几行代码作为例子来确保我做得对吗?谢谢!

另外,由于我以前从未有机会这样做,所以在服务器上的ASP.NET C#中读取文件的最佳方法是什么?

更新:谢谢你的所有答案!我找到了解决问题的方法,但提供的所有三个答案都是应对这一挑战的好方法。正如你可以猜到的那样,给出接受的答案是一个艰难的选择,但是我会敬畏地把它交给this answer,因为他显然付出了很多努力,这是一个相当优雅的解决方案,他回答了我的两个问题。谢谢大家的精彩答案!

4 个答案:

答案 0 :(得分:7)

创建一个可在服务器代码中访问的div:

<div runat="server" id="xmlGeneratedContent"></div>

在Page_Load中:

xmlGeneratedContent.InnerHtml = parcedHtmlFromXml;

修改
作为对上一个问题的回答:如何读取服务器上的文件...
如果该文件位于网站下,您可以使用Server.MapPath从相对URL获取物理磁盘位置:

string filename = Server.MapPath("files/file.txt");

如何阅读它取决于它是什么类型的文件,以及你想如何阅读它。如果你想把它作为纯文本阅读,这里有一些方法:

一次阅读所有内容:

string content = System.IO.File.ReadAllText(filename);

一次性读入包含以下行的字符串数组:

string[] content = System.IO.File.ReadAllLines(filename);

一次只读一行:

System.IO.StreamReader sr = new System.IO.StreamReader(filename);
while (!sr.EndOfStream)
{
    string line = sr.ReadLine(); // or other method reading a block 
    //Do something whith the line
}
sr.Close();
sr.Dispose();

答案 1 :(得分:5)

代码隐藏功能:

public string getHML()
{
 return "htmltext";
}
页面上的

<div><%=getHML()%></div>

答案 2 :(得分:3)

只是为了增加多样性:我最喜欢的解决方案是使用

<asp:Literal runat="server" ID="myLiteral" />

然后在代码中:

this.MyLiteral.Text = "Generated HTML goes here";

优于<div>的优势在于它不会产生额外的HTML - 因此您可以将其放在任何您想要的位置并生成您想要的任何内容。

如果我可以轻松地在每个请求上重新生成内容,我通常也会在其上设置EnableViewState="false"。这会减少ViewState的大小,因为myLiteral.Text也会保存在ViewState中。

答案 3 :(得分:2)

那么,你自己的建议肯定会奏效。清除ASPX页面中的所有html,并在Page_Load事件中执行此操作:

Response.Write(System.IO.File.ReadAllText(yourFilePath));

我认为还有更多内容。