Список XML в C # для индекса AspNet MVC - PullRequest
0 голосов
/ 30 сентября 2018

Мне нужно отобразить список AvailabilityOutbound и AvailabilityReturn, имеющий несколько записей, т.е. AvailabilityFlight каждой на странице индекса asp.net mvc.Структура классов модели и метода контроллера приведена ниже.Я не понял, что делать дальше.Приведенный ниже класс создается с помощью XML-ответа от службы SOAP asmx, а затем сопоставляется с классами C #.

[XmlRoot(ElementName = "AvailabilityOutbound")]
public class AvailabilityOutbound
{
    [XmlElement(ElementName = "AvailabilityFlight")]
    public List<AvailabilityFlight> AvailabilityFlight { get; set; }
}

[XmlRoot(ElementName = "AvailabilityReturn")]
public class AvailabilityReturn
{
    [XmlElement(ElementName = "AvailabilityFlight")]
    public List<AvailabilityFlight> AvailabilityFlight { get; set; }
}

[XmlRoot(ElementName = "Availability")]
public class Availability
{
    [XmlElement(ElementName = "AvailabilityOutbound")]
    public AvailabilityOutbound AvailabilityOutbound { get; set; }

    [XmlElement(ElementName = "AvailabilityReturn")]
    public AvailabilityReturn AvailabilityReturn { get; set; }
}

[XmlRoot(ElementName = "AvailabilityFlight")]
public class AvailabilityFlight
{
    [XmlElement(ElementName = "airline_rcd")]
    public string Airline_rcd { get; set; }
    [XmlElement(ElementName = "flight_number")]
    public string Flight_number { get; set; }
    [XmlElement(ElementName = "booking_class_rcd")]
    public string Booking_class_rcd { get; set; }
    [XmlElement(ElementName = "boarding_class_rcd")]
    public string Boarding_class_rcd { get; set; }
}

Метод контроллера, для которого необходимо отображать данные:

public ActionResult Index(string xmlResult)
{
    var ser = new XmlSerializer(typeof(Availability));
    using (var sr = new StringReader(xmlResult))
    {
        var obj = (Availability)ser.Deserialize(sr);
        return //
    }
    //no idea how can i map the records to view
    return View();

}

ипросмотреть как:

@model IEnumerable<Project.Models.AvailabilityFlight>

Мне нужно руководство по передаче списка для просмотра и отображению записей в индексном представлении с несколькими примерами фрагментов кода для метода просмотра и индекса.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Я бы создал набор данных и отображение с использованием кода, подобного следующему для публикации:

Отображение информации DataTable на странице aspx

Код для помещения данных в набор данныхбудет выглядеть так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataSet ds = new DataSet("Availability");
            DataTable dtFlight = new DataTable("Flight");
            ds.Tables.Add(dtFlight);

            dtFlight.Columns.Add("Airline RCD",typeof(string));
            dtFlight.Columns.Add("Flight Number",typeof(string));
            dtFlight.Columns.Add("Booking Class",typeof(string));
            dtFlight.Columns.Add("Boarding Class",typeof(string));

            DataTable dtReturn = new DataTable("Return");
            ds.Tables.Add(dtReturn);

            dtReturn.Columns.Add("Airline RCD", typeof(string));
            dtReturn.Columns.Add("Flight Number", typeof(string));
            dtReturn.Columns.Add("Booking Class", typeof(string));
            dtReturn.Columns.Add("Boarding Class", typeof(string));


            string xml = "put your sting here";
            Availability availability = DeSerialize<Availability>.Index(xml);

            foreach (AvailabilityFlight flight in availability.AvailabilityOutbound.AvailabilityFlight)
            {
                dtFlight.Rows.Add(new object[] { flight.Airline_rcd, flight.Flight_number, flight.Booking_class_rcd, flight.Boarding_class_rcd });
            }

            foreach (AvailabilityFlight flight in availability.AvailabilityReturn.AvailabilityFlight)
            {
                dtReturn.Rows.Add(new object[] { flight.Airline_rcd, flight.Flight_number, flight.Booking_class_rcd, flight.Boarding_class_rcd });
            }
        }


    }
    public class DeSerialize<T>
    {
        public static T Index(string xmlResult)
        {
            var ser = new XmlSerializer(typeof(T));
            using (var sr = new StringReader(xmlResult))
            {
                 return (T)ser.Deserialize(sr);
            }
        }

    }
    [XmlRoot(ElementName = "AvailabilityOutbound")]
    public class AvailabilityOutbound
    {
        [XmlElement(ElementName = "AvailabilityFlight")]
        public List<AvailabilityFlight> AvailabilityFlight { get; set; }
    }
    [XmlRoot(ElementName = "AvailabilityReturn")]
    public class AvailabilityReturn
    {
        [XmlElement(ElementName = "AvailabilityFlight")]
        public List<AvailabilityFlight> AvailabilityFlight { get; set; }
    }
    [XmlRoot(ElementName = "Availability")]
    public class Availability
    {
        [XmlElement(ElementName = "AvailabilityOutbound")]
        public AvailabilityOutbound AvailabilityOutbound { get; set; }

        [XmlElement(ElementName = "AvailabilityReturn")]
        public AvailabilityReturn AvailabilityReturn { get; set; }
    }
    [XmlRoot(ElementName = "AvailabilityFlight")]
    public class AvailabilityFlight
    {
        [XmlElement(ElementName = "airline_rcd")]
        public string Airline_rcd { get; set; }
        [XmlElement(ElementName = "flight_number")]
        public string Flight_number { get; set; }
        [XmlElement(ElementName = "booking_class_rcd")]
        public string Booking_class_rcd { get; set; }
        [XmlElement(ElementName = "boarding_class_rcd")]
        public string Boarding_class_rcd { get; set; }
    }
}
0 голосов
/ 30 сентября 2018

Прежде всего, Вы должны вернуть доступность для просмотра

  public ActionResult Index(string xmlResult)
  {
      var ser = new XmlSerializer(typeof(Availability));
      using (var sr = new StringReader(xmlResult))
      {
           var obj = (Availability)ser.Deserialize(sr);
           return View(obj);
      }
  }

В просмотре:

@model Project.Models.Availability

@foreach (var item in Model.AvailabilityOutbound.AvailabilityFlight )  
{
  ...  // each item of AvailabilityFlight in AvailabilityOutbound
}

@foreach (var item in Model.AvailabilityReturn.AvailabilityFlight )  
{
  ...  // each item of AvailabilityFlight in AvailabilityReturn 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...