モデル バインディング 10 進数値に関するこの記事に基づいたコンマを含む 10 進数用のカスタム モデル バインダーがあります。
これは ajax リクエストで使用された場合を除いて正常に動作します
コンマ付きの金額を含まない ajax リクエスト (つまり、1,000 未満の値) では問題なく機能します。
エラーは
System.ArgumentException: The parameters dictionary contains a null entry for parameter 'amount'
of non-nullable type 'System.Decimal' for method
'System.Web.Mvc.JsonResult IsDepositRequired(System.String, System.String, System.String,
Boolean, System.Decimal, System.DateTime)' in 'Client.Controllers.DealingController'. An
optional parameter must be a reference type, a nullable type, or be declared as an
optional parameter.
Parameter name: parameters
at System.Web.Mvc.ActionDescriptor.
ExtractParameterFromDictionary(ParameterInfo parameterInfo, IDictionary`2 parameters, MethodInfo methodInfo)
モデル バインダーが golbal.asax に正しく登録されている
私が逃した可能性のあるものをありがとう
ajax コード:
$.post('/Dealing/IsDepositRequired', {
baseCurrency: deal.baseCurrency,
termsCurrency: deal.termsCurrency,
dealtCurrency: deal.dealtCurrency,
isBuy: deal.direction == 'BUY',
amount: deal.dealtCurrency == deal.baseCurrency ? deal.baseAmount : deal.termsAmount,
valueDate: deal.valueDate
}, function (show) {
if (show) {
$('.Deposit').fadeIn(500);
} else {
$('.Deposit').hide();
}
}, 'json');
コントローラ
[HttpPost]
public virtual JsonResult IsDepositRequired(string baseCurrency, string termsCurrency, string dealtCurrency, bool isBuy, decimal amount, DateTime valueDate)
{
Firebug ネット コンソール :
amount 100,000.00
baseCurrency GBP
dealtCurrency GBP
isBuy true
termsCurrency EUR
valueDate 30/10/2012
ソース:
baseCurrency=GBP&termsCurrency=EUR&dealtCurrency=GBP&isBuy=true&amount=100%2C000.00&valueDate=30%2F10%2F2012