5

我的控制器能够创建模型对象,但所有与模型相关并分配给空值的属性

环境:VS 2010,ASP.NET MVC RC 最新,jQuery 1.7.1

以下是 Web API 控制器代码

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" })
});

控制器确实创建了模型“客户”对象,但“名称”和“城市”属性均为空。

这里有什么问题?

我在此站点上阅读了许多类似的问题,但找不到解决方案。

4

4 回答 4

2

This blog here gives a good idea about how Model Binding differs in ASP.NET Web project and a ASP.NET Web API project.

I was facing a similar issue in the project I was working on and adding a explicit ModelBinding attribute made the property values stick

Requested Data :

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

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

Request Class:

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

Controller :

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 回答
0

下次发生这种情况时,请确保属性设置器上没有“内部”关键字。即:而不是public string Comment {get; internal set;} 使用public string Comment {get; set;}

这为我修好了。

于 2017-10-25T15:21:31.887 回答
0

遇到了类似的问题,我的问题原来是请求正文中的无效 JSON。在其中一个字段之后缺少逗号。因此,如果 JSON 中存在任何语法错误,默认模型绑定器似乎只是绑定 null。

于 2017-04-24T06:51:46.853 回答