为什么Fluent Validation的IsEmpty规则触发了我的`Id`属性值为零?

时间:2013-01-24 08:22:51

标签: asp.net-mvc fluentvalidation business-rules

我有一个适用于所有方面的视图模型ApplicantProfileModel。它声明了一个属性

[HiddenInput(DisplayValue = false)]
public int Id { get; set; }

并且此属性出现在像

这样的局部视图中
@model Comair.RI.UI.Models.ApplicantProfileModel
@Html.ValidationSummary(true)
<fieldset>
    <legend></legend>
    <ul class="form-column">
        @Html.HiddenFor(m => m.Id)
    .....

我对此属性有以下Fluent验证规则:

RuleFor(p => p.Id).NotEmpty().WithMessage("Id is empty. Messsage may have been tampered with.");

值为零的int肯定不是“空”。我知道我可以将规则更改为不等于零,但这并不能解决我的问题并回答我的问题,为什么int的值0被流畅的验证视为空?

1 个答案:

答案 0 :(得分:1)

因为int是值类型而且不能有值。我会根据FluentValidationdefault检查该类型,我认为int为0。如果你可以使Id成为可以为空的int,那么你可以获得这种行为。否则我会按你的建议做,并检查不等于0.