2010-02-17 63 views
5

參數字典包含對於方法System.Web.Mvc的非可爲空類型'System.Int32'的參數'appId'的null條目'HLIT_TicketingMVC.Controllers.TicketController'中的'ContentResult CheckForInstaller(Int32)'。可選參數必須是引用類型,可爲空類型,或者聲明爲可選參數。

function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
    type:'POST', 
    url:url, 
    data:message, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success:successFunc, 
    error:errorFunc 
    }); 
}; 

該數據對象被構建爲如下:

var message={"appId":application.val()}; 

我也嘗試了jsonified字符串:

var message="{'appId':"+application.val()+"}"; 

var message="{'appId':'"+application.val()+"'}"; 

我驗證該消息正在通過公關在嘗試發佈之前使用oper int值。在調試鼠標最近表明:{appId="6"}

控制器上的方法簽名是:

public ContentResult CheckForInstaller(int appId) 

當我刪除從方法簽名的參數,但它擊中裏面的斷點,所以它要麼簽名需要某種屬性,或者我認爲這個消息沒有被正確構建。

+0

當您將int更改爲字符串時,您會得到任何結果: public ContentResult CheckForInstaller(String appId)? – Pbirkoff 2010-02-17 15:20:13

+0

那個應用程序對象是什麼?你確定它按預期工作嗎? – 2010-02-17 15:23:22

+0

@çağdaş - 是的,當我將鼠標懸停在結果上時,它顯示了我期望的值。 @ Pbirkoff - 我沒有嘗試,但發現問題,接受下面的答案。 – Maslow 2010-02-17 15:49:12

回答

9

刪除此:

contentType: 'application/json; charset=utf-8', 

MVC是不會給JSON解析成一個int。你想要默認值application/x-www-form-urlencoded

+0

+1 awesome it works – Maslow 2010-02-17 15:45:07

+0

在這種情況下,我們是否必須爲將要調用的操作方法定義特殊路線?還是自動綁定? – 2011-04-25 09:47:10

+0

@LordCover:不,你不需要特別的路線。它像任何其他形式一樣受到約束。 – 2011-04-25 14:44:16

2

我想這也許您正在發送JSON控制器試試這個

function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
    type:'POST', 
    url:url, 
    data:"appId=" + application.val(),//not sure where you get the value from in your current code 
    dataType: 'json', 
    success:successFunc, 
    error:errorFunc 
    }); 
}; 
+0

你說得對JSON,但他的'數據'已經是正確的。 – 2010-02-17 15:24:16

+0

在這種情況下,我們是否必須爲將要調用的操作方法定義特殊路線?還是自動綁定? – 2011-04-25 09:47:29

相關問題