在json

时间:2016-09-21 09:43:54

标签: json asp.net-mvc validation

我想在提交服务器之前强制要求字段。为此,我使用 [必需] 数据注释进行模型验证。它可以按预期用于字符串数据类型,但不能用于 double

由于某些原因,它不适用于 double 类型属性。 以下是我对模型

的代码
public class ProductMetadata
{
    [Required]
    public string Barcode { get; set; }

    [StringLength(50)]
    [Required(AllowEmptyStrings = false, ErrorMessage="Please insert the product name!")]
    public string Name { get; set; }

    [Range(0, 5000)]
    public double ShippingCostPerUnit { get; set; }

    [Range(0, 10000)]
    public int QuantityForFreeShipping { get; set; }

    public Nullable<int> CategoryId { get; set; }

    public bool IsDeleted { get; set; }

    [Range(0, 1000000)]
    [Required(ErrorMessage="Please provide a unit price for the product!")]
    public double UnitPrice { get; set; }
}

响应正文是JSON响应,并且对于所有已完成的必填字段都没有以下内容:

{
 "Message":"The request is invalid.",
 "ModelState":
            {"product":["Required property 'UnitPrice' not found in JSON. Path '', line 1, position 33."],
             "product.Barcode":["The Barcode field is required."],
             "product.Name":["Please insert the product name!"]
            }
}

我不明白为什么名称条形码正常工作,而 UnitPrice 则不行。

修改1

如果我删除了 [必需] 属性,并且我输入了 UnitPrice -1,我会收到相应的验证消息,那么为什么不能为< strong>必需属性?

编辑2 :请求有效内容(还更新了 ProductMetadata 类):

{IsDelete: false, CategoryId: 1}
CategoryId: 1
IsDelete: false

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:0)

最快的决定是让单位价格可以为空“

[Range(0, 1000000)]
[Required(ErrorMessage="Please provide a unit price for the product!")]
public double? UnitPrice { get; set; }

问题是json中缺少单位价格字段,JSON格式化程序尝试反序列化double并在执行Required之前收到异常。