0

我有一个包含逗号的小数自定义模型绑定器,它基于这篇关于模型绑定十进制值的文章

这工作正常,除非由 ajax 请求使用

它适用于不包含带逗号的金额(即值小于一千)的 ajax 请求

错误是

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)

模型绑定器在 gobal.asax 中正确注册

知道我可能错过了什么谢谢

阿贾克斯代码:

$.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

4

2 回答 2

1

您对操作的 ajax 调用可能未使用正确的查询字符串参数或表单编码值发送金额。您可以使用提琴手检查请求以查看发送的内容。

于 2012-04-17T14:00:06.840 回答
0

最好不要让您的操作方法采用那么多参数,而是将它们放入现有模型/新模型中并将视图字段包装在表单中,然后将表单序列化到请求中。像这样的东西?

假设这是您的字段的模型:

public class MyModel
{
    public string BaseCurrency { get; set; }
    public string TermsCurrency { get; set; }
    public string DealtCurrency { get; set; }
    public bool IsBuy { get; set; }
    public decimal Amount { get; set; }
    public DateTime ValueDate { get; set; }
}

然后假设你有一个类似的视图:

@model MyModel

//putting these fields in a form with an id of myForm
@Html.EditorFor(m => m.BaseCurrency)
//rest of your fields...

然后在您的 ajax 调用中指定数据时,您只需将以下内容作为数据发送:

$("#myForm").serialize()

然后让您的操作方法采用模型,如下所示:

[HttpPost]
public virtual JsonResult IsDepositRequired(MyModel model)
于 2012-04-17T16:40:48.573 回答