ASP.NET:динамическая генерация HTML, как это сделать?

StackOverflow https://stackoverflow.com/questions/1409257

Вопрос

Я немного занимался 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 #, который находится на вашем сервере?

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

Это было полезно?

Решение

Создайте 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();

Другие советы

В коде функции: на странице:

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top