ASP.NET:динамическая генерация HTML, как это сделать?
-
05-07-2019 - |
Вопрос
Я немного занимался 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));
Не думаю, что в этом есть что-то еще.