2016-11-28 68 views
0

伙计们我正在采取对象数组中的值,并从ajax中击中webmethod,但我无法获取该数组的键和值。下面是我的Ajax代码在c中获取对象数组的键和值#

var ShedulerTableCount = $('#dvSave table').length; 
      var ShedulersData = []; 
      ShedularCount = new Object({ ShedulerCount: $('#txtTimeSeries').val() }) 
      ShedulersData.push(ShedularCount); 
      for(var k=1; k <= ShedulerTableCount ; k++) 
      { 
       var tableId = $('#tblTimeInterval' + k); 
       tableId.find('tbody tr').each(function (i, el) { 
        Shedularobj = new Object({ ShedularName:'',InterVal: '', TimeSeries: '', LockingPeriod: '', TradeDuration: '', Min: '', Max: '', Touch: '', NoTouch: '', IPG: '', IPGDeduction: '', Closeable: '', txtTimeSeries: '', txtGap: '', txtRollingInterval:'' }); 
        var $tds = $(this).find('td'); 
        Shedularobj.ShedularName = 'sheduler ' + k; 
        Shedularobj.InterVal = $tds.find('label').eq(0).text(); 
        Shedularobj.TimeSeries = $tds.find('label').eq(1).text(); 
        Shedularobj.LockingPeriod = $tds.find('input').eq(0).val(); 
        Shedularobj.TradeDuration = $tds.find('input').eq(1).val(); 
        Shedularobj.Min = $tds.find('input').eq(2).val(); 
        Shedularobj.Max = $tds.find('input').eq(3).val(); 
        Shedularobj.Touch = $tds.find('input').eq(4).val(); 
        Shedularobj.NoTouch = $tds.find('input').eq(5).val(); 
        Shedularobj.IPG = $tds.find('input').eq(6).val(); 
        Shedularobj.IPGDeduction = $tds.find('input').eq(7).val(); 
        Shedularobj.Closeable = $tds.find('input').eq(8).val(); 
        Shedularobj.txtTimeSeries = $('#txtTimeSeries').val(); 
        Shedularobj.txtGap = $('#txtGap').val(); 
        Shedularobj.txtRollingInterval = $('#txtRollingInterval').val(); 
        ShedulersData.push(Shedularobj); 

       }); 
      } 

     $.ajax({ 
        type: "POST", 
        url: "BinarySetting.aspx/SaveShedulers", 
        data: "{ShedulersData:" + JSON.stringify(ShedulersData) + "}", 
        contentType: 'application/json; charset=utf-8', 
        success: function (XMLHttpRequest, textStatus, errorThrown) { 
         alert('Success'); 
        }, 
        error: function (result) { 
         alert('error'); 
        } 
       }); 

这是从那里我想获取对象的key和value我的C#代码:

[WebMethod] 
    public static string SaveShedulers(object[] ShedulersData) 
    { 
     object objCount = ShedulersData[0]; 
     // System.Reflection.PropertyInfo pi = objCount.GetType().GetProperty("Value"); 
     var ss = objCount.GetType().GetProperties().Single(pi => pi.Name == "ShedularCount").GetValue(objCount, null); 
     return "ss"; 
    } 

,我也要去附上截图来了解场景更清晰:

enter image description here

+0

如何'ShedulersData [0] .Key'和'ShedulersData [0] .Value' –

+0

你如何在客户端填写ShedulersData数据? –

+0

@MohitShrivastava这里没有任何关键的属性,否则我可以很容易地得到这只有它的方法是GetType() –

回答

1

在代码中创建一个类的背后是这样

public class SchedulerTuple 
{ 
    public string ShedularName { get; set; } 
    public string InterVal { get; set; } 
    public string TimeSeries { get; set; } 
    public string LockingPeriod { get; set; } 
    public string TradeDuration { get; set; } 
    public string Min { get; set; } 
    public string Max { get; set; } 
    public string Touch { get; set; } 
    public string NoTouch { get; set; } 
    public string IPG { get; set; } 
    public string IPGDeduction { get; set; } 
    public string Closeable { get; set; } 
    public string txtTimeSeries { get; set; } 
    public string txtGap { get; set; } 
    public string txtRollingInterval { get; set; } 
} 

,然后改变你的WebMethod的PARAMATERS到一个List这样

[WebMethod] 
public static string SaveShedulers(List<SchedulerTuple> ShedulersData) 
{ 
    // your code here 
} 

,如果你想为其他值背后传递给你的代码,如调度数,再加入另一种说法,而不是包装了很多的东西在一个单一的对象。

我不认为你需要在这里使用反射。我希望它有帮助。

+0

好的答案@丹尼斯,你已经救了我的一天。非常感谢好友..... :) –

0

除了@丹麦思想,像这样修改ajax调用。

$.ajax({ 
         type: "POST", 
         url: "BinarySetting.aspx/SaveShedulers", 
         data: ShedulersData, //<------------- 
         contentType: 'application/json; charset=utf-8', 
         success: function (XMLHttpRequest, textStatus, errorThrown) { 
          alert('Success'); 
         }, 
         error: function (result) { 
          alert('error'); 
         } 
        });