我正在尝试在Javascript中创建Product
实例,而不是使用[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
和Foo
但不能创建List<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) + "}",
});
}
答案 0 :(得分: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"}];
答案 1 :(得分:0)
使用数组,并使用array.push
将项目添加到数组中。例如:
product.Bars = [];
product.Bars.push({ Name: "foo" });
答案 2 :(得分:0)
JavaScript不知道List<T>
是什么。它只知道如何制作数组。所以你必须构造一个Bar
的数组并在JSON中传递它。
幸运的是,这很容易解决:
product.Bars = [
{ Name: "bar 1" },
{ Name: "bar 2" },
{ Name: "bar 3" },
];
以上可能就是你所需要的。我非常确定ASP.NET会足够聪明,可以自动将Bar[]
转换为List<Bar>
,但万一它不是:
public class Product
{
public Type Type { get; set; }
public Foo Foo { get; set; }
public IEnumerable<Bar> Bars { get; set; }
}
然后,如果您仍然需要List<T>
功能,只需将数组转换为WebMethod中的List:
[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" });