-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 に答える