如何在mvc中

时间:2017-06-02 09:29:07

标签: c# asp.net-mvc view model

我有2个设备,每个设备有10个纬度值和10个经度值。我有2个设备,每个设备有10个lat长值,但只有10个项目正在添加另外10个设备2的数据在模型中被替换。如何在模型中添加2个设备数据,而不为每个设备创建2个不同的类。

即时访问视图中的模型值

 @Model[0].latitude.ToString()....@Model[9].latitude.ToString(), 
 @Model[1].longitude.ToString()....@Model[9].latitude.ToString(),

我应该能够在视图中访问2个不同的设备数据

@Model[0][0]...[0][9];
@Model[1][0]...[1][9];

  public ActionResult Index()
     {
      List<AssetTrackerViewModel> model = new List<AssetTrackerViewModel>();
      model.AddRange(getAssetDetails("ED"));
      model.AddRange(getAssetDetails("EE"));
      return View(model);
     }
     private List<AssetTrackerViewModel> getAssetDetails(string deviceID)
       {
        List<AssetTrackerViewModel> model = new List<AssetTrackerViewModel>();

         try
          {
           WebRequest req = WebRequest.Create(@"url");
           req.Method = "GET";
           req.Headers["Authorization"] = "Basic " + "a2VybmVsc3BoZXJlOmtlcm5lbHNwaGVyZQ==";
           HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
           var encoding = resp.CharacterSet == "" ? Encoding.UTF8 : Encoding.GetEncoding(resp.CharacterSet);
           using (var stream = resp.GetResponseStream())
            {
             var reader = new StreamReader(stream, encoding);
             var responseString = reader.ReadToEnd();

             var Pirs = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AssetDetail>>(responseString);
             var items = Pirs.Where(a => !a.dataFrame.EndsWith("AAAAAAAAAAA="))
              .GroupBy(a => a.dataFrame.Substring(a.dataFrame.Length - 12))
              .Select(g => g.First())                                                                 .OrderByDescending(a => a.timestamp).Take(10);
              foreach (var item in items)
                {
                 byte[] data = Convert.FromBase64String(item.dataFrame.ToString());
                 string hex = BitConverter.ToString(data);//converting base 64 to hexcode
                 string formattedHex = BitConverter.ToString(data).Replace(@"-", string.Empty);
                 string longitude = formattedHex.Substring(14, formattedHex.Length - 14);//04AC07EB
                 long longitudeValue = Convert.ToInt64(longitude, 16);
                 string longvalue = longitudeValue.ToString();
                 longvalue = longvalue.Insert(2, ".");
                 string latitude = formattedHex.Substring(6, formattedHex.Length - 14); //010A366B
                 long lat = Convert.ToInt64(latitude, 16);
                 string latvalue = lat.ToString();
                 latvalue = latvalue.Insert(2, ".");
                 AssetTrackerViewModel assetModel = new AssetTrackerViewModel();
                 assetModel.deviceid = deviceID;
                 assetModel.latitude = latvalue;
                 assetModel.longitude = longvalue; 
                 model.Add(assetModel);
                 }
                }
              }   
               return model;
            }

    view model

          public class AssetDetail
            {
             public long id { get; set; }
             public DateTime timestamp { get; set; }
             public string dataFrame { get; set; }
            }

1 个答案:

答案 0 :(得分:1)

修改你的课程:

// this is class that represents single device
public class AssetTracker
{
   public AssetTracker()
   {
      latitude = new List<string>();
      longitude = new List<string>();
   }

   public string deviceid {get; set;}
   public List<string> latitude {get; set;}
   public List<string> longitude {get; set;}
}   

然后你viewmodel:

public class AssetTrackersViewModel
{
   public AssetTrackersViewModel()
   {
     AssetTrackers = new List<AssetTracker>();
   }

   public List<AssetTracker> AssetTrackers {get;set}
}

然后是您的getAssetDetails方法:

private AssetTracker getAssetDetails(string deviceID)
{
  var assetTracker = new AssetTracker { deviceid = deviceID };

 try
  {
   WebRequest req = WebRequest.Create(@"url");
   req.Method = "GET";
   req.Headers["Authorization"] = "Basic " + "a2VybmVsc3BoZXJlOmtlcm5lbHNwaGVyZQ==";
   HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
   var encoding = resp.CharacterSet == "" ? Encoding.UTF8 : Encoding.GetEncoding(resp.CharacterSet);
   using (var stream = resp.GetResponseStream())
    {
     var reader = new StreamReader(stream, encoding);
     var responseString = reader.ReadToEnd();

     var Pirs = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AssetDetail>>(responseString);
     var items = Pirs.Where(a => !a.dataFrame.EndsWith("AAAAAAAAAAA="))
      .GroupBy(a => a.dataFrame.Substring(a.dataFrame.Length - 12))
      .Select(g => g.First())                                                                 .OrderByDescending(a => a.timestamp).Take(10);
      foreach (var item in items)
        {
         byte[] data = Convert.FromBase64String(item.dataFrame.ToString());
         string hex = BitConverter.ToString(data);//converting base 64 to hexcode
         string formattedHex = BitConverter.ToString(data).Replace(@"-", string.Empty);
         string longitude = formattedHex.Substring(14, formattedHex.Length - 14);//04AC07EB
         long longitudeValue = Convert.ToInt64(longitude, 16);
         string longvalue = longitudeValue.ToString();
         longvalue = longvalue.Insert(2, ".");
         string latitude = formattedHex.Substring(6, formattedHex.Length - 14); //010A366B
         long lat = Convert.ToInt64(latitude, 16);
         string latvalue = lat.ToString();
         latvalue = latvalue.Insert(2, ".");

         assetTracker.latitude.Add(latvalue);
         assetTracker.longitude.Add(longvalue);
         }

         return assetTracker;
        }
      }   
    }

然后:

 public ActionResult Index()
 {
  var model = new AssetTrackersViewModel();
  model.AssetTrackers.Add(getAssetDetails("ED"));
  model.AssetTrackers.Add(getAssetDetails("EE"));
  return View(model);
 }

然后,您可以使用Razor调用:

@model AssetTrackersViewModel

用于第一个&#39;设备&#39;

 @Model.AssetTrackers[0].latitude[0]
 @Model.AssetTrackers[0].longitude[0]

 @Model.AssetTrackers[0].latitude[9]
 @Model.AssetTrackers[0].longitude[9]

用于第二个&#39;设备&#39;

 @Model.AssetTrackers[1].latitude[0]
 @Model.AssetTrackers[1].longitude[0]

 @Model.AssetTrackers[1].latitude[9]
 @Model.AssetTrackers[1].longitude[9]