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

C# ASP.NET:动态生成HTML,如何?,c#,asp.net,javascript,dynamic,C#,Asp.net,Javascript,Dynamic,在过去的一年里,我一直在做ASP.NET,但我从来没有遇到过这样的挑战:我现在正在构建一个非常简单的网站,主要基于HTML和Javascript。但是,在一个页面上,我需要从服务器读取一个XML文件,解析它,从XML文件中包含的值创建HTML,并将其作为响应输出。为此,我将使用ASP.NET和C#。我知道如何解析XML并用C#生成HTML代码,但如何将HTML代码写入响应/页面?生成的动态HTML只在页面的一个大div中,页面的其余部分是静态的。最好的方法是什么?由于我以前从未做过类似的事情,我

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

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


更新:感谢您提供的所有答案!我已经找到了解决问题的方法,但提供的三个答案都是应对这一挑战的好方法。你可以猜到,给谁一个公认的答案是一个艰难的选择,但我会给他,出于敬畏,因为他显然付出了很多努力,这是一个相当优雅的解决方案,他回答了我的两个问题。谢谢大家的精彩回答

在代码隐藏功能中:

public string getHML()
{
 return "htmltext";
}
第页:

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

在代码隐藏功能中:

public string getHML()
{
 return "htmltext";
}
第页:

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

好吧,你自己的建议肯定会奏效。清除ASPX页面中的所有html,然后在page_Load事件中执行以下操作:

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

我认为没有更多的了。

好吧,你自己的建议肯定会奏效。清除ASPX页面中的所有html,然后在page_Load事件中执行以下操作:

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

我不认为还有更多内容。

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

<div runat="server" id="xmlGeneratedContent"></div>
编辑:
作为对最后一个问题的回答:如何读取服务器上的文件…
如果文件位于网站下,则可以使用
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();
将所有内容一次读入包含以下行的字符串数组:

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();
一次读一行:

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();

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

<div runat="server" id="xmlGeneratedContent"></div>
编辑:
作为对最后一个问题的回答:如何读取服务器上的文件…
如果文件位于网站下,则可以使用
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();
将所有内容一次读入包含以下行的字符串数组:

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();
一次读一行:

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();

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

<asp:Literal runat="server" ID="myLiteral" />
相比,它的优点是不会生成额外的HTML,因此您可以将它放在任何您想要的地方,并生成任何您想要的内容


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

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

<asp:Literal runat="server" ID="myLiteral" />
相比,它的优点是不会生成额外的HTML,因此您可以将它放在任何您想要的地方,并生成任何您想要的内容


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

所以在加载页面时会调用getHML()?酷!去试试看!我真的很喜欢这种方法的优雅,因为我从来不知道你可以像那样在HTML中嵌入服务器端代码。非常感谢!我在用这个!这样,每当页面对服务器进行回发调用时,服务器将执行getHTM()函数。我强烈推荐这个答案,以便在加载页面时调用getHML()?酷!去试试看!我真的很喜欢这种方法的优雅,因为我从来不知道你可以像那样在HTML中嵌入服务器端代码。非常感谢!我在用这个!这样,每当页面对服务器进行回发调用时,服务器将执行getHTM()函数。我强烈推荐这个答案,我喜欢这个,因为它更干净。我想你可能想看看asp.net的生命周期,以确保你没有做错。如果您使用post而不使用get,我想您可能希望在page_init中执行上述操作…我赞成这样做,因为它更干净。我想您可能希望查看asp.net生命周期,以确保您不会做错。如果您使用post而不是get,我想您可能希望在page_init中执行上述操作…请将您的第二个问题设置为新问题…这里已经回答了,尽管这是一个好主意,因为很难选择“已接受的答案”,因为我使用了其中一种方法,而解释是另一种方法。谢谢大家!请把你的第二个问题变成一个新问题……这里已经回答了,尽管这是个好主意,因为很难选择“接受的答案”,因为我使用了其中一种方法,而解释是另一种方法。Tha