1

を使用して、10 億回行ったようにASP.NET MVC 3、jQuery ( ) AJAX 呼び出しを行っています。ver 1.7.1しかし、私は奇妙なことに気づきました。次の呼び出しは正常に機能します

// license object
var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};
// make the request
var $req = $.post('/License/theLicense', license); 
$req.success(function () {
    // this works!
});


[HttpPost]
public void Save(License theLicense)
{
    // save
}

ただし、コントローラーのデータパラメーターを指定すると、コントローラーに登録されません

// license object
var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};
// make the request
// this time the controller parameter is specified
// the object will be blank at the server
var $req = $.post('/License/theLicense', { theLicense: license });
$req.success(function () {
    // this does not work
});

以下に示すように、オブジェクトはコントローラーで空白です

ここに画像の説明を入力

別のデータパラメーターを渡す必要があるため、これは面倒ですが、この問題のためにできません。

注: JSON は POCO と同じです。

data パラメーターを指定すると、オブジェクトがコントローラーで空白に表示されるのはなぜですか?

4

3 に答える 3

3

POCOデシリアライザーが奇妙な理由で引っ掛かることがあります。JSONオブジェクトがPOCOと完全に一致し、それでも逆シリアル化されない場所を以前に見ました。

これが発生した場合、私は通常、オブジェクトをJSON文字列としてサーバーに送信し、サーバー上で逆シリアル化します。個人的にはServiceStack.Textを使用しています。これが最速だからです。

したがって、jQueryは次のようになります。

var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};

var $req = $.post('/License/theLicense', JSON.stringify(license));

次に、コントローラーは文字列パラメーター(json)を取り込んで、オブジェクトを逆シリアル化します。

   [HttpPost]
   public void Save(string json)
   {
       License theLicense = JsonSerializer<License>.DeserializeJsonString(json);
       // save
   }
于 2013-01-27T15:51:47.587 に答える
1

これは、ライセンスを含むオブジェクトをメンバーとして送信しているが、コントローラーがLicense オブジェクトを期待しているために発生します。

次のように、データのラッパー クラスを宣言する必要があります。

  public Class MyWrapperClass
  {
      public License theLicense;
      //declare other extra properties here  
  }

そしてあなたのコントローラー:

[HttpPost]
public void Save(MyWrapperClass thewrraper)
{
    var license = thewrapper.theLicense;
    // save
}

編集: json オブジェクトのメンバーを quotes.eg( {"theLicense": license })で囲んでみてください

于 2012-11-16T17:03:43.463 に答える
0

これを試して:

JS:

// license object
var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};

var $req = $.post('/License/Save', { theLicense: license });
$req.success(function () {
    // this does not work
});

。ネット

public class LicenseController: Controller 
{
   ...

   [HttpPost]
   public void Save(License theLicense)
   {
       // save
   }

   ...
}
于 2012-11-16T17:42:01.440 に答える