2009-09-11 99 views
1

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

此外,因为我从来没有机会做到这一点,什么是读取位于您的服务器上的ASP.NET C#文件的最佳方式是什么?

UPDATE:谢谢你所有的答案!我找到了解决我的问题的办法,但所有提供的三个答案都是解决这个问题的好办法。正如你所猜测的那样,给出接受的答案是一个艰难的选择,但我会敬畏地给它this answer,因为他明确地付出了很多努力,这是一个非常优雅的解决方案,他回答了我的问题。谢谢大家的美妙回答!

+0

请让你的第二个问题成为一个新问题 – Mac 2009-09-11 06:47:39

+0

它已经在这里得到了回答,虽然这将是一个好主意,因为很难选择“接受答案”,因为我使用了其中一种方法,解释是在另一个。感谢大家! – 2009-09-11 08:45:12

回答

7

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

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

在Page_Load中:

xmlGeneratedContent.InnerHtml = parcedHtmlFromXml; 

编辑:
并回答了最后一个问题:如何在读取文件服务器...
如果该文件位于该网站下,则可以使用Server.MapPath从该网站获取物理磁盘位置相对地址:

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

我赞成这个,因为它是方式更清洁。 – Dykam 2009-09-11 06:40:18

+0

我已更新OP以解释为什么我将此标记为接受的答案。谢谢! – 2009-09-11 08:54:43

+0

我想你可能想查看一下asp.net生命周期,以确保你不会做错。如果您使用后,而不是得到我认为你可能想要在page_init ... – zzzuperfly 2009-09-11 10:50:23

5

在代码隐藏功能:

public string getHML() 
{ 
return "htmltext"; 
} 

上页:

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

那么getHML()会在页面加载时被调用吗?凉!去试试吧! – 2009-09-11 06:19:50

+0

我真的很喜欢这种方法的优雅,因为我从来不知道你可以像HTML那样在HTML中嵌入服务器端代码。非常感谢!我正在使用这个! – 2009-09-11 08:55:42

2

好吧,你自己的建议肯定会工作。清除所有的HTML中的ASPX页面,并且在Page_Load事件中,你会做到这一点:

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

我不认为有更给它。

+0

谢谢你的回答。 – 2009-09-11 08:56:19

+0

不客气。 :) – 2009-09-11 09:33:23

3

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

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

然后在代码:

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

<div>的优点是,这不会产生额外的HTML - 这样你可以把它放在任何你想要的地方并生成你想要的东西。

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

+0

我会为你提供视图状态+1,但不能打扰注册;) – wefwfwefwe 2009-09-11 09:15:37