5

私のコントローラーはモデルオブジェクトを作成できますが、モデルに関連し、null値に割り当てられたすべてのプロパティ

環境:VS 2010、ASP.NET MVC RC最新、jQuery 1.7.1

以下は、WebAPIコントローラーのコードです。

public class Customer
{
    public string Name { get; set; }
    public string City { get; set; }
}
public class UserController : ApiController
{
    public Customer Post(Customer user)
    {
        return user;
    }
}

以下はajax呼び出しコードです

$.ajax('/api/user',
{
  ContentType: "application/x-www-form-urlencoded; charset=UTF-8",
  dataType: 'json',
  type: 'POST',
  data: JSON.stringify({ "Name": "Scott", "City": "SC" })
});

コントローラはモデルの「Customer」オブジェクトを作成しますが、「Name」プロパティと「City」プロパティの両方がnullです。

ここで何が問題になっていますか?

私はこのサイトで多くの同様の問題を読みましたが、解決策を見つけることができませんでした。

4

4 に答える 4

2

このブログは、ASP.NETWebプロジェクトとASP.NETWebAPIプロジェクトでモデルバインディングがどのように異なるかについての良いアイデアを提供します。

私が取り組んでいたプロジェクトで同様の問題に直面し、明示的なModelBinding属性を追加すると、プロパティ値が固定されました

要求されたデータ:

var customer  = { Name : "customer Name", City : "custome City" }

$.ajax({ 
   url : ...
   type: ...
   data : customer
});

リクエストクラス:

public class Customer
{
    public string Name { get; set; }
    public string City { get; set; }
}

コントローラー:

public class UserController : ApiController
{
    [HttpGet]
    public Customer Get([ModelBinder] Customer user)
    {
        // fetch from whereever
    }
}
于 2012-12-29T22:32:39.870 に答える
1

私は今同じ問題を経験しています。答えは 100% わかりませんが、以下は私の JavaScript で、クラス [DataModel] とプロパティ [DataMember] に追加しました。あれは:

    [DataModel]
    public class Customer
    {
      [DataMember] public string Name { get; set; }
      [DataMember] public string City { get; set; }
    }

そして私のJavaScript

        $(document).ready(function () {
        // Send an AJAX request
        $.getJSON("api/session/GetAll",
        function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, val) {

                //debugger;

                // Format the text to display.
                //var str = val.Name + ': $' + val.Price;
                var str = 'abcd';

                // Add a list item for the product.
                $('<li/>', { text: str })
                .appendTo($('#products'));
            });
        });
    });
于 2012-12-29T21:19:24.837 に答える