2016-11-28 62 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'); 
         } 
        });