去年我一直在做一些(开启和关闭)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,因为他显然付出了很多努力,这是一个相当优雅的解决方案,他回答了我的两个问题。谢谢大家的精彩答案!
答案 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));
我认为还有更多内容。