0

クライアント側に、SettingName プロパティと SettingValue プロパティを持つ JavaScript オブジェクトがあります。

データ例 -

obj1.SettingName = "createdDate";
obj1.SettingValue = "10/07/2013";

obj2.SettingName = "arrayOfNames";
obj1.SettingValue = SomeArray; //An array of 5 strings

var settingsArray =new Array();
settingsArray[0] = obj1;
settingsArray[1] = obj2;

var settingsContainer = new Object;
settingsContainer.Settings = settingsArray;

ajax 呼び出し -

    $.ajax({
        type: "POST",
        url: "myURL",
        data: { settings: JSON.stringify(settingsContainer)},
        dataType: 'json',
        success: function (data) {
            //do something
        }
    });

サーバー側クラス -

public class Setting
{        
    public string SettingName { get; set; }
    public object SettingValue { get; set; } //so this can hold multiple data types
}

public class SettingsContainer 
{
    public List<Setting> Settings { get; set;}
}

コントローラーアクション -

public ActionResult myURL(SettingsContainer settings) {
    //Here, the value for SettingsContainer.Settings[1].SettingValue, which 
      should be Array[5] i.e. on the C# side, I expect to see Object[5], 
      is only {object}. I'm not sure what's going on.

      Is my approach of handling this correct?
}

アドバイス/ヘルプをいただければ幸いです。ありがとうございました!

4

3 に答える 3

0

このようにajax呼び出しでデータ行を設定してみてください

data: "{ 'settings':" +  JSON.stringify(settingsContainer)+"}",

(また、SettingsContainer を避けて、ベクターまたは設定のリストをメソッド引数として使用することもできます)。

次のコードは、問題の解決に役立ちます。

コードビハインド:

public class helper
{
    public List<DoubleText> prop { get; set; }
}
public class DoubleText
{
    public string data1 { get; set; }
    public object data2 { get; set; }
}
[WebMethod]
public static string work(helper example)
{
// do stuff here
    return "ok";
}

JavaScript/jquery

var example = new Object();
        example.data1 = 'value';
        example.data2 = ['value1', 'value2'];

        var example2 = new Object();
        example2.data1 = 'value';
        example2.data2 = ['value1', 'value2'];

        var vector = new Array();
        vector[0] = example;
        vector[1] = example2;

        var ex = new Object();
        ex.prop = vector;


            var test = "{ 'example':" + JSON.stringify(ex) + "}";
            $.ajax({
                type: "POST",
                url: '/work.aspx/work',
                data: test,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    // stuff
                },
                error: function () { // other stuff}

            });
于 2013-10-08T12:01:33.250 に答える
0

サーバー側の方法では、次を使用する必要があります。

   public ActionResult myURL(string settings) {
       // deserialize the string to your object here;
    }

ただし、クラスは JavaScript の逆シリアル化でサポートされていないため、クラスを再設計する必要があります。

于 2013-10-08T06:34:36.997 に答える
0

'SettingValue' をList<string>期待どおりに使用してみてください。デシリアライザーはオブジェクトが何であるかを知らないため、オブジェクトにデシリアライズすることはできません。

于 2013-10-08T09:46:10.700 に答える