-2

ProductJavascriptでインスタンスを作成し、を使用してサーバーに渡そうとしています[webmethod]

[WebMethod]
public static void SetProduct(Product product)
{    
     // i want a product instance    
}

以下はProduct私が作成しようとしているクラスです:

public class Product
{
    public Type Type { get; set; }
    public Foo Foo { get; set; }
    public List<Bar> Bars { get; set; }
}

public class Type
{
    public string ID { get; set; }
}

public class Foo
{
    public string ID { get; set; }
    public string Color { get; set; }
}

public class Bar
{
    public string Name { get; set; }
}

私はJavaScriptで作成できますが、できTypeませFooList<Bar>:(詳細についてはコード内のコメントを参照してください)

Javascript

function setProduct() {
    var product = {};
    product.Type = {};
    product.Foo = {};

    product.Type.ID = 'typeID';
    product.Foo.ID = 'fooID';
    product.Foo.Color = 'fooColor';

    //here is my question how can create List<Bar> Bars and add it to product item???

    $.ajax({
        type: "POST",
        url: "Default.aspx/SetProduct",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        data: "{product:" + JSON.stringify(product) + "}",
    });
}
4

3 に答える 3

0
// create an array
product.Bars = [];

// add an element to the array
product.Bars.push({
    Name: "Foo"
});

または、要素を使用して配列を初期化することもできます。

// create and initialize array
product.Bars = [{Name:"Foo"}, {Name:"Bar"}];
于 2012-12-04T21:40:41.443 に答える
0

配列を使用し、。を使用して項目を配列に追加しますarray.push。例:

product.Bars = [];
product.Bars.push({ Name: "foo" });
于 2012-12-04T21:40:46.290 に答える
0

JavaScriptはaが何であるかを知りませんList<T>。配列の作成方法しか知りません。したがって、sの配列を作成Barし、それをJSONに渡す必要があります。

幸い、これは簡単な修正です。

product.Bars = [
    { Name: "bar 1" },
    { Name: "bar 2" },
    { Name: "bar 3" },
];

上記はおそらくあなたが必要とするすべてです。Bar[]ASP.NETは、それをList<Bar>自動的に変換するのに十分スマートであると確信していますが、そうでない場合に備えて、次のようにします。

public class Product
{
    public Type Type { get; set; }
    public Foo Foo { get; set; }
    public IEnumerable<Bar> Bars { get; set; }
}

それでも機能が必要な場合List<T>は、WebMethodで配列をリストに変換するだけです。

[WebMethod]
public static void SetProduct(Product product)
{    
     var list = product.Bars.ToList();
     product.Bars = list;
     return product;
}

今でも、これらの優れたList<T>メソッドにアクセスできます。

((List<Bar>)product).Add(new Bar() { Name = "bar 4" });
于 2012-12-04T21:48:30.440 に答える