2016-11-28 2 views
0

Jungs Ich nehme die Werte in Array von Objekt und die Webmethode von Ajax, aber ich bin nicht in der Lage, den Schlüssel und die Werte dieses Arrays zu bekommen. Unten ist mein Ajax-CodeGet Schlüssel und Wert von Objekt-Array in 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'); 
        } 
       }); 

Und das ist mein C# -Code aus, wo ich will den Schlüssel und den Wert des Objekts holen:

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

ich auch zu verstehen, den Screenshot anhängen werde Szenario deutlicher:

enter image description here

+0

Wie wäre es 'ShedulersData [0] .Key' und' ShedulersData [0] .Value' –

+0

, wie Sie Daten in ShedulersData in Client-Seite füllen? –

+0

@MohitShrivastava gibt es keine Schlüsseleigenschaft in diesem sonst kann ich leicht bekommen das haben nur Methoden darin, das ist GetType() –

Antwort

1

eine Klasse in Ihrem Code hinter erstellen wie diese

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

und dann die Paramater Ihrer Webmethod wie dies

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

zu einer Liste ändern, wenn Sie andere Werte, um Ihren Code hinter wie die Scheduler Zahl übergeben wollen, dann ein weiteres Argument hinzufügen, anstatt eine Menge Verpackung von Sachen in einem einzigen Objekt.

Ich glaube nicht, dass Sie Reflexion hier verwenden müssen. Ich hoffe, es hilft.

+0

Schöne Antwort @Danish haben Sie meinen Tag retten. Danke viel Kumpel ..... :) –

0

Ändern Sie zusätzlich zu den @Danish-Ideen den Ajax-Aufruf wie folgt.

$.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'); 
         } 
        }); 
Verwandte Themen