2016-07-04 17 views
2

I持って私のASP.NETコアコードで、次のモデル:投稿複雑なJSON

public class TestItem 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public List<TestSubItem> SubItems { get; set; } 
} 

public class TestSubItem 
{ 
    public string Id { get; set; } 
} 

、私のコントローラ/ TestController.csで、次の方法:

// POST: Test/Create 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult Create([FromBody]TestItem item) 
    { 
     // Use item here... 
     return View(item); 
    } 

var mySubItems = [{"Id": "1"}]; 

function submitForm() { 
    // myForm contains an Id textbox and a Name textbox 
    $("#myForm").submit(); 
}; 

function doPost() { 

    var testItem = { 
     Id: "2", 
     Name: "testName", 
     SubItems: mySubItems 
    }; 

    $.ajax({ 
     url: '@Url.Action("Create" ,"Test")', 
     type: "POST", 
     contentType: "application/json", 
     data: JSON.stringify(testItem), 
     success: function (data) { 
      alert(data); 
     }, 
     error: function (error) { 
      var x = error; //break here for debugging. 
     } 
    }); 
}; 

私はdoPostを使用すると、私はいつもグラム:

私は自分のページに次のJavaScriptを持っていますサーバーから戻ってきた。400 Bad Request。一方、submitFormは正常に動作しますが、サーバーに送信されるデータにmySubItemsを含める方法がわかりません。

この中で最も速い方法は何ですか?

+0

'URLチェックアウト:あなたはtestItemに次を追加してすることができるかもしれない '@のUrl.Action( "作成"、 "テスト")'、'。これは確実に機能しますか? –

+0

はい、URLはOKです – marin

答えて

5

コントローラに[ValidateAntiForgeryToken]を含めると問題が発生しています。データを転記するときにトークンを含める必要があります。 MVCはそれを自動的にフォームに含めるので、submitForm()が機能します。

難しいのは、JSONデータを投稿する方法をわかりません。詳細については、

__RequestVerificationToken: $('input[name="__RequestVerificationToken"]', form).val() 

include antiforgerytoken in ajax post ASP.NET MVC

関連する問題