2014-11-18 3 views
0

Мне интересно, что было бы лучшим способом создать список элементов в веб-форме asp.net с помощью C# на основе информации, которую я получаю из HttpWebRequest. В моей Page_Load я делаю веб-запрос на Wowza-сервер, который возвращает xml. Я сохраняю это в строке, а затем использую xmlreader, чтобы получить нужные мне данные. После этого я хочу просмотреть это в списке в моей веб-форме. Надеюсь, я был достаточно ясен.список предметов на основе Webrequest

Я также хочу, чтобы иметь возможность щелкнуть элементы, которые будут запускать функцию.

EDIT: Я не могу на всю жизнь получить предложенный ответ на работу, когда я запустил код на веб-сайте, который был полностью пустым. Вот C# и файл HTML коды:

using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Web; 
 
using System.Web.UI; 
 
using System.Web.UI.WebControls; 
 
using System.Xml; 
 
using System.IO; 
 
using System.Net; 
 

 
public partial class Test : System.Web.UI.Page 
 
{ 
 
    protected void Page_Load(object sender, EventArgs e) 
 
    { 
 
     List<String> LiveStreamms = new List<String>(); 
 
     string xml = "<ArrayOfLiveStream xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/MvcApplication1.Models'><LiveStream><Name>Test1</Name><Path>Path1</Path></LiveStream></ArrayOfLiveStream>"; 
 
     XmlReader reader = XmlReader.Create(new StringReader(xml)); 
 
     XmlDocument doc = new XmlDocument(); 
 
     doc.Load(reader); 
 
     LiveStreams.Data = doc.OuterXml; 
 
     LiveStreams.XPath = "/LiveStream/Name"; 
 
    } 
 
}
<%@ Page Language="C#" CodeFile="Test.aspx.cs" Inherits="Test" runat="server"%> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 

 

 
<html xmlns="http://www.w3.org/1999/xhtml" > 
 
    <head runat="server"> 
 
    <title>ASP.NET Example</title> 
 
</head> 
 
<body> 
 
    <form id="form1" runat="server"> 
 

 
     <asp:XmlDataSource 
 
     id="LiveStreams" 
 
     runat="server" 
 
     XPath="/ArrayOfLiveStream"/> 
 

 
     <asp:DataList 
 
     id="PeopleDataList" 
 
     DataSourceID="LiveStreams" 
 
     Runat="server"> 
 

 
     <ItemTemplate> 
 
      <table cellpadding="4" cellspacing="4"> 
 
      <tr> 
 
       <td style="vertical-align:top; width:120"> 
 
       <asp:Label id="PathNameLabel" Text='<%# XPath("Livestream/Path") %>' runat="server" />, 
 
       <asp:Label id="NameLabel" Text='<%# XPath("Livestream/Name") %>' runat="server" /> 
 
       </td> 
 
      </tr> 
 
      </table> 
 
     </ItemTemplate> 
 
     </asp:DataList> 
 
    </form> 
 
    </body> 
 
</html>

+0

Теперь вы отредактировали свой вопрос, на который вы запросили еще больше функциональности, и его смесь из двух вопросов, ниже я ответил, как сделать список данных, есть примеры вызова функции на стороне сервера и на стороне клиента над этим сайтом, я предлагаю искать там для этого, поскольку это действительно дублирующий вопрос. Кроме того, вы не говорите, что именно вы хотите позвонить. –

ответ

0

Вы можете использовать XmlDataSource вместе с DataList сделать это есть хорошая запись на MSDN here о том, как сделать это в основном вы берете xml и используете запросы XPath в шаблонах для создания желаемого эффекта.

Поскольку статья может быть устаревшей, я включаю их образец, но это не мой код.

<%@ Page Language="C#" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head runat="server"> 
    <title>ASP.NET Example</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:XmlDataSource 
     id="PeopleDataSource" 
     runat="server" 
     XPath="/People/Person" 
     DataFile="~/App_Data/people.xml" /> 

     <asp:DataList 
     id="PeopleDataList" 
     DataSourceID="PeopleDataSource" 
     Runat="server"> 

     <ItemTemplate> 
      <table cellpadding="4" cellspacing="4"> 
      <tr> 
       <td style="vertical-align:top; width:120"> 
       <asp:Label id="LastNameLabel" Text='<%# XPath("Name/LastName")%>' runat="server" />, 
       <asp:Label id="FirstNameLabel" Text='<%# XPath("Name/FirstName")%>' runat="server" /> 
       </td> 
       <td valign="top"> 
       <asp:Label id="StreetLabel" Text='<%# XPath("Address/Street") %>' runat="server" /><br /> 
       <asp:Label id="CityLabel" Text='<%# XPath("Address/City") %>' runat="server" />, 
       <asp:Label id="RegionLabel" Text='<%# XPath("Address/Region") %>' runat="server" /> 
       <asp:Label id="ZipCodeLabel" Text='<%# XPath("Address/ZipCode") %>' runat="server" /> 
       </td> 
      </tr> 
      </table> 
     </ItemTemplate> 
     </asp:DataList> 
    </form> 
    </body> 
</html> 

, если вы заметили, что XML загружаются в источник данных, то, что используется в шаблонах списка данных, в XPath querys используется для каждой записи с составным именем. Его немного похоже на использование ретранслятора.

Также обратите внимание, что вам не нужно использовать Xml-файл, который можно использовать для свойства Data на XmlDataSource для привязки к XmlDocument, который вы создали из строки. Например

XmlDocument путь:

XmlDocument doc = new XmlDocument(); 
doc.Load(reader); 
xmlDataSource.Data = doc.OuterXml; 
xmlDataSource.XPath = "/People/Person"; 

XDocument путь:

XDocument doc = XDocument.Parse(xml); 
xmlDataSource.Data = doc.ToString(); 
xmlDataSource.XPath = "/People/Person"; 

Свойство .data документирована here, Также отметим, вы можете использовать <data> тег для описания данных, если ее статический (в вашем случае его нет). Это зависит от вас, что лучше для вас.

+0

Действительно ли это хорошее решение? должен ли я иметь xml-файл в моем каталоге, чтобы моя программа записывала код, который он получает с моего медиа-сервера, а затем используйте это, чтобы обновить список. Это означало бы, что веб-сайт должен будет перезаписывать содержимое xml-файла каждый раз, когда я запускаю команду. Редактирование – user1254588

+0

можно связать с документом xml с использованием свойства .Data. Таким образом, вы можете прочитать свой xml в виде строки. Загрузите его в XmlDocument или XDocument, если хотите (XDocument - это новый способ), а затем сделайте то, что вы хотите в связующем. –

+1

@ user1254588 Нет, этот метод сохраняет полученные данные в объекте XmlDocument или XDocument. Вы можете записать его в файл, если хотите, но как написано, он просто остается в памяти. – pseudocoder