1

我在网上搜索了所有内容,我认为我正确使用了 JSON,但我找不到它有什么问题。我需要将此 json 对象作为 MVC 控制器操作的参数传递:

JSON:

{ 
"ContactId": "0",
"Fax2": "dsad",
"Phone2": "dsad",
"Tittle": "asdsa",
"Cellphone": "dsadsd", 
"Address": { "City": "kjshksdfks",
             "Country": "undefined",
             "Id": "0",
             "State": "dsadsa"}
}

.NET 对象如下:

public class Contact
{
    public string ContactId {get; set;}
    public string Fax2 {get; set;}
    public string Phone2 {get; set;}
    public string Tittle {get; set;}
    public string Cellphone {get; set;}
    public Address ContactAddress {get; set;}
}

嵌套地址类型如下:

public class Address
{
    public string City {get; set;}
    public string Country {get; set;}
    public int Id {get; set;}
    public string State {get; set;}
}

我的 JSON 有什么问题?,为了将干净传递给控制器​​操作,我缺少什么

确切的错误是:无效的 JSON 原语:联系人

注意:我尝试使用 javascript 对象、JSON.stringify 和 toJSON()

提前致谢!

4

2 回答 2

4

我怀疑您缺少 ajax 调用的内容类型。另见:http ://forums.asp.net/t/1665485.aspx/1?asp+net+mvc+3+json+values+not+recieving+at+controller 。

我改变了几件事 1) 标题 -> 标题和地址 -> 联系人地址;这应该有效:

JSON:

{
  "ContactId": "a",
  "Fax2": "b",
  "Phone2": "c",
  "Title": "d",
  "Cellphone": "e",
  "ContactAddress": {
      "Id": 22,
      "City": "a",
      "State": "b",
      "Country": "c"
    }
}

称呼:

<script>
    var contact = { "ContactId": "a", "Fax2": "b", "Phone2": "c", "Title": "d", "Cellphone": "e", "ContactAddress": { "Id": 22, "City": "a", "State": "b", "Country": "c"} };

    $.ajax({
        type: 'POST',
        url: '[YOUR-URL]',
        data: JSON.stringify(contact),
        success: function (result) {
            alert('success');
        },
        dataType: "json",
        contentType: "application/json; charset=utf-8"
    });
</script>
于 2012-05-14T07:55:07.527 回答
1

完成,我分享解决方案:

由于请求表明它是“json”类型,因此附加类型必须在 json 中,否则路由引擎会将其视为非 json 对象,因此标记 json 无效,所以,在我的如果我这样做:

{
  "ContactId": "a",
  "Fax2": "b",
  "Phone2": "c",
  "Title": "d",
  "Cellphone": "e",
  "ContactAddress": {
      "Id": 22,
      "City": "a",
      "State": "b",
      "Country": "c"
    }
},{"provider": 1}

尽管它不需要任何额外的配置,因为使用 JSON 来传递额外的参数,但在使用 .NET 对象的不同场景中,我们必须指定控制器可以接受许多参数。因此,为此我们必须配置控制器路由:

context.MapRoute(
    "Providers_default",
    "Catalogs/{controller}/{action}/{id1}/{id2}",
    new { controlller = "Provider", action = "Index", id = UrlParameter.Optional }
);

这是一个链接: http ://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx

最好的祝福!

于 2012-05-14T15:45:36.040 回答