-1

我正在研究 ASP.NET MVC4.0。

我的字符串从视图中是这样发布的:-

[{"name":"AddressNumber","value":"1"},{"name":"OrganizationProd","value":""},{"name":"ClientId","value":""},{"name":"ProductId","value":""},{"name":"TaxId1","value":""},{"name":"TaxId2","value":""},{"name":"LaborID","value":"0"}]

下面是我的控制器的操作方法,它正在接收输入:-

[AllowAnonymous]
[HttpPost]
public ActionResult UpdateProducts(string ModelString){
}

下面是我正在执行的字符串(在 ModelString 变量中):-

[{"name":"AddressNumber","value":"1"},{"name":"OrganizationProd","value":""},{"name":"ClientId","value":""},{"name":"ProductId","value":""},{"name":"TaxId1","value":""},{"name":"TaxId2","value":""},{"name":"LaborID","value":"0"}]

之后我像这样反序列化字符串:-

var sear = new JavaScriptSerializer();
var dictDynamic = sear.Deserialize<dynamic>(ModelString);

我正在 dictDynamic 变量中获取动态数组。现在我想通过其名称获取属性,而不是通过从 dictDynamic 对象进行索引。

目前我通过这样的索引来获取属性: -

dictDynamic[0]["value"] 
dictDynamic[1]["value"]

但我想按这样的属性名称解析它:-

dictDynamic["Name"]["value"] 
dictDynamic["Description"]["value"]

谁能帮我解决这个问题?

4

2 回答 2

2

您可以在服务器端使用 ViewModel,而不是发送模型字符串。

您可以像这样创建 ViewModel:

class ProductViewModel {

   public int AddressNumber { get; set; }
   public int ProductId { get; set; }
     ...
}

然后更改您的控制器方法:

[AllowAnonymous]
[HttpPost]
public ActionResult UpdateProducts(ProductViewModel vm){
  ...
}

从您的视图中,您将像这样发送 json 对象:

{
   "AddressNumber":"10",
   "OrganizationProd":"1",
   "ClientId":"1",
   "ProductId":"1",
   "TaxId1":"23",
   "TaxId2":"23",
   "LaborID":"10"
}

这将自动将您的值从 View 绑定到控制器上的 ViewModel,然后您可以在代码中使用 ViewModel 对象,然后您就拥有了强类型实体。

而不是这个:

dictDynamic["AddressNumber"]
dictDynamic["OrganizationProd"]

现在你可以这样写:

vm.AddressNumber
vm.OrganizationProd
于 2013-11-05T08:58:20.470 回答
1

您需要将 JavaScript对象而不是数组传递给您的函数。在这种情况下,数组不是正确的数据结构。对象有键和值。键将是 AddressNumber、OrganizationProd、ClientId、ProductId、TaxId1 等。它们的值将是 1、“”、“0”等。

例如,对于您的示例,这将是您的对象:

{
   "AddressNumber":1,
   "OrganizationProd":"",
   "ClientId":"",
   "ProductId":"",
   "TaxId1":"",
   "TaxId2":"",
   "LaborID":0
}

你像现在一样反序列化它:

var s = "{\"AddressNumber\":1, \"OrganizationProd\":\"\", \"ClientId\":\"\", \"ProductId\":\"\", \"TaxId1\":\"\", \"TaxId2\":\"\", \"LaborID\":0}";
var sear = new JavaScriptSerializer();
var dictDynamic = sear.Deserialize<dynamic>(s);

反序列化后,您将能够引用如下值:

dictDynamic["AddressNumber"]
dictDynamic["OrganizationProd"]
于 2013-11-05T08:11:39.857 回答