ASP.NET: динамически генерировать HTML, как? - PullRequest
1 голос
/ 11 сентября 2009

В течение последнего года я немного занимался ASP.NET (включал и выключал), но никогда не сталкивался с этой проблемой: сейчас я создаю веб-сайт, который довольно прост, в основном основан наHTML и Javascript.Однако на одной странице мне нужно прочитать XML-файл с сервера, проанализировать его, создать HTML из значений, содержащихся в XML-файле, и вывести его в качестве ответа.Я собираюсь использовать ASP.NET с C # для этого.Я понимаю, как анализировать XML и генерировать HTML-код в C #, но как мне написать HTML-код в ответ / на страницу?Сгенерированный динамический HTML находится только в одном большом элементе div на странице, а остальная часть страницы является статической.Каков наилучший способ сделать это?Поскольку я никогда не делал ничего подобного раньше, я предполагаю, что один из способов сделать это - очистить весь HTML-источник страницы и использовать Response.Write () в событии Page_Load, чтобы записать весь HTML-код.страница с уже вставленными значениями XML.Это правильный метод, и если да, не могли бы вы привести несколько строк кода в качестве примера, чтобы убедиться, что я делаю это правильно?Спасибо!

Кроме того, поскольку у меня никогда не было возможности сделать это раньше, каков наилучший способ чтения файла в ASP.NET C #, который находится на вашем сервере?

ОБНОВЛЕНИЕ : Спасибо за все ответы!Я нашел решение своей проблемы, и все же все три предоставленных ответа являются хорошим способом решения этой проблемы.Как вы можете догадаться, это трудный выбор, кому дать принятый ответ, но я собираюсь дать ему этот ответ , с благоговением, потому что он явно приложил немало усилий, этодовольно элегантное решение, и он ответил на оба моих вопроса.Спасибо всем за прекрасные ответы!

Ответы [ 4 ]

7 голосов
/ 11 сентября 2009

Создать div, который доступен в коде сервера:

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

В Page_Load:

xmlGeneratedContent.InnerHtml = parcedHtmlFromXml;

EDIT:
Как ответ на последний вопрос: как прочитать файл на сервере ...
Если файл находится под веб-сайтом, вы можете использовать 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();
5 голосов
/ 11 сентября 2009

В коде за функцией:

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

на странице:

<div><%=getHML()%></div>
3 голосов
/ 11 сентября 2009

Просто для разнообразия: мое любимое решение - использовать

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

А затем в коде:

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

Преимущество перед <div> заключается в том, что он не генерирует лишний HTML-код, поэтому вы можете поместить его в любое место и генерировать все, что захотите.

Часто я также устанавливаю EnableViewState="false", если я могу легко восстановить содержимое при каждом запросе. Это сокращает размер ViewState, потому что myLiteral.Text также сохраняется в ViewState.

2 голосов
/ 11 сентября 2009

Ну, ваше собственное предложение наверняка сработает. Очистите все HTML на странице ASPX, и в событии Page_Load вы сделаете это:

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

Не думаю, что в этом есть что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...