2017-07-20 7 views
0

バインディング:モデルは、私はこのようなAJAX要求を作っている私のプロジェクトで、.NETのコアでのAjaxリクエスト

$(document).ready(function() { 

    var friends = []; 
    friends[0] = { Id: 1, Name: "John" }; 
    friends[1] = { Id: 2, Name: "Mike" }; 

    var obj = { 
     Id: 1, 
     Name: "Piotr", 
     Friends: friends 
    } 

    $.ajax({ 
     contentType: 'application/json; charset=utf-8', 
     type: 'GET', 
     url: '/Home/Test', 
     data: obj 
    }); 

}); 

私は下のクラスにデータをバインドしようとしている:

public class Person 
{ 
    public long Id { get; set; } 

    public string Name { get; set; } 

    public IEnumerable<Friend> Friends { get; set; } 
} 

public class Friend 
{ 
    public long Id { get; set; } 

    public string Name { get; set; } 
} 

このようなアクションの結果では:

[HttpGet] 
    public IActionResult Test(Person p) 
    { 
     HttpRequest r = HttpContext.Request; 

     return Json(new 
     { 
      sEcho = "", 
      iTotalRecords = 2, 
      iTotalDisplayRecords = 2, 
      aaData = "" 
     }); 
    } 

問題は要求がなく、空白のFreiendsリストを使用したテストのアクションの結果をトリガしていることです。データはPersonクラスのFriendsプロパティにバインドされていません。

Screen

私が間違って何をしているのですか?

リクエストクエリ文字列は、このようなものです:あなたはにいくつかのことをする必要がある {?Id=1&Name=Piotr&Friends%5B0%5D%5BId%5D=1&Friends%5B0%5D%5BName%5D=John&Friends%5B1%5D%5BId%5D=2&Friends%5B1%5D%5BName%5D=Mike}

+0

なぜHttpGetで行うのですか? HttpPostを試してください。 – levent

+0

すべてのPerson pプロパティをポストするためにそれを変更しているときはnullまたは0です。 –

答えて

0

あなたがそれらを試すことができます。..

$.ajax({ 
    type: 'post', 
    dataType: 'json', 
    url: '/Home/Test', 
    data: obj 
}); 

サーバ側..

[HttpPost] 
public IActionResult Test(Person p) 
0

これを動作させる。

Javascriptを

$(document).ready(function() { 

    var friends = []; 
    friends[0] = { id: 1, name: "John" }; 
    friends[1] = { id: 2, name: "Mike" }; 

    var obj = { 
     id: 1, 
     name: "Piotr", 
     friends: friends 
    } 

    $.ajax({ 
     contentType: "application/json; charset=utf-8", 
     dataType: "application/json", 
     type: 'POST', 
     url: '/Home/Test', 
     //convert your data to a JSON object before you send it 
     data: JSON.stringify(obj) 
    }); 

}); 

ASPNETコア[FromBody]属性が送られたOBJを解析するための正しい入力フォーマッタを設定します。 JSONの場合、ASPNET CoreはJson.NETライブラリを使用して入力フォーマッタを設定します。

[HttpPost] 
public IActionResult Test([FromBody]Person p) 
{ 

    return Json(new 
    { 
     sEcho = "", 
     iTotalRecords = 2, 
     iTotalDisplayRecords = 2, 
     aaData = "" 
    }); 
} 
関連する問題