2016-12-15 108 views
0

我在ASP.NET Core MVC中遇到模型綁定問題。我有這個端點,當它從Javascript調用時會被點擊,但postData總是爲空。模型在ASP.NET Core中綁定複雜類型的列表

[HttpPost("/somepost")] 
    public string SomePost([FromBody] PostData postData) 
    { 
     return "Got It!"; 
    } 

    public class PostData 
    { 
     public int ID { get; set; } 
     public string[] ListOrArray { get; set; } // Doesn't matter if this ends up a List or an Array 
    } 

此端點正在從$。點擊功能擊中:

$('img.some-image').click(function() { 
    array = ['sample data', 'some more']; 

    data = { 
     ID: 1, 
     ListOrArray: array 
    }; 

    $.ajax({ 
     type: 'POST', 
     url: '/somepost', 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     data: data, 
     success: function (result) { 
      console.log('Received: '); 
      console.log(result); 
     } 
    }); 
}); 

我猜測,這個問題是模型綁定,但我不知道。我已經看過小寫的JavaScript對象屬性名稱的例子,但這並沒有改變我的任何東西。

我也必須從POST中刪除[ValidateAntiForgeryToken],但我更願意將其添加回來。我猜我必須將該令牌添加到GET請求,以便我可以將其提交給POST ,但我還沒有想出如何做到這一點。儘管如此,我認爲這與我的問題沒有任何關係。

我搜索了答案和例子,但他們都沒有爲我工作。 ASP.NET Core很新,所以沒有太多。我在版本1.1.0。

+0

要添加標記,只包含'__RequestVerificationToken:$( '輸入[名稱= 「__ RequestVerificationToken」]')VAL();'英寸您的數據對象 –

回答

3

您已設置contentType:json,但您要發送plain object您需要發送json object

要轉換objectjson object可以使用JSON.stringify

$.ajax({ 
    type: 'POST', 
    url: '/somepost', 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(data), 
    success: function (result) { 
     console.log('Received: '); 
     console.log(result); 
    } 
}); 
+0

'datatype'與發佈的內容無關(指定服務器發回的類型)。我假設你的意思是說你已經設置了'contentType:'json''但是...... _ –

+0

@StephenMuecke是的。 – Mairaj