【问题标题】:XML to C# List to AspNet MVC IndexXML 到 C# 列表到 AspNet MVC 索引
【发布时间】:2019-03-05 19:01:28
【问题描述】:

我必须显示具有多个记录的AvailabilityOutbound 和AvailabilityReturn 列表,即asp.net mvc 索引页面中每个记录的AvailabilityFlight。 模型类和控制器方法的结构如下。 我不知道下一步如何进行。 下面的类是通过来自 SOAP asmx 服务的 XML 响应生成的,然后映射到 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>

我需要关于传递列表以查看并在索引视图中显示记录的指导,其中包含用于视图和索引方法的少量示例代码 sn-ps。

【问题讨论】:

  • 你想让AvailabilityOutbound中的AvailabilityFlightAvailability中的AvailabilityReturnin的每一项都在视图中吗?
  • @Hossein 我正在获取 obj 中的值,但无法通过视图。我想在列表中显示每个项目的 AvailabilityOutbound 和 AvailabilityReturn,即 AvailabilityFlight。有时,一条航段的 AvailabilityFlight 可能不可用,在这种情况下,只会显示单航段。

标签: c# asp.net xml asp.net-mvc list


【解决方案1】:

我将使用与以下发布类似的代码创建数据集和显示:

Display DataTable information in aspx page

将数据放入数据集的代码如下所示:

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; }
    }
}

【讨论】:

    【解决方案2】:

    首先,你必须返回Availability才能查看

      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 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 2015-11-18
      • 2014-09-21
      • 2012-03-27
      • 1970-01-01
      • 2016-10-07
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多