【问题标题】:ASP.NET MVC4 DataAnnotations Validation on Models acting very strange - validating all fields even when I only specify one field to be validatedASP.NET MVC4 DataAnnotations Validation on Models 行为非常奇怪 - 验证所有字段,即使我只指定一个要验证的字段
【发布时间】:2013-04-01 14:52:28
【问题描述】:

为了简单起见,我有一个模型,它只有一个必需属性(仅在名称上)。我的视图只有一个与名称绑定的@Html.ValidationMessageFor。当我在未填写任何内容时单击视图上的保存时,所有字段都按要求返回。如果我填写名称字段,其余字段将按要求返回。我真的需要一些帮助来弄清楚为什么会这样:

public class KeyActive
{
    [Key]
    public int Pk { get; set; }

    [Required(ErrorMessage="Name of filler is required.")]
    [Display(Name="Name:")]
    public string Name { get; set; }

    [Display(Name = "Capsule 00 Pack Stat:")]
    public int PackStat00 { get; set; }

    [Display(Name = "Capsule 0 Pack Stat:")]
    public int PackStat0 { get; set; }

    [Display(Name = "Capsule 1 Pack Stat:")]
    public int PackStat1 { get; set; }

    [Display(Name = "Capsule 3 Pack Stat:")]
    public int PackStat3 { get; set; }

    public string CreatedBy { get; set; }
    public DateTime CreatedDate { get; set; }
    public string ModifiedBy { get; set; }
    public DateTime ModifiedDate { get; set; }
}

这是我的观点:

<div data-role="fieldcontain">
    @Html.LabelFor(model => model.Name)
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>

<div data-role="fieldcontain">
    @Html.LabelFor(model => model.PackStat00)
    @Html.EditorFor(model => model.PackStat00)
</div>

<div data-role="fieldcontain">
    @Html.LabelFor(model => model.PackStat0)
    @Html.EditorFor(model => model.PackStat0)
</div>

<div data-role="fieldcontain">
    @Html.LabelFor(model => model.PackStat1)
    @Html.EditorFor(model => model.PackStat1)
</div>

<div data-role="fieldcontain">
    @Html.LabelFor(model => model.PackStat3)
    @Html.EditorFor(model => model.PackStat3)
</div>

最后,当我填写表格并点击保存时,我得到了以下信息:

它的行为就像每个字段都是必需的 - 当我填写名称并将其他所有内容留空时,它不会让我提交它,因为它似乎认为其他字段也是必需的。我真的需要一些帮助,以确定是否有另一个我没有看到执行验证的地方,或者我在这里做错了什么!谢谢。

【问题讨论】:

    标签: c# asp.net-mvc validation data-annotations


    【解决方案1】:

    可能是因为您的 ViewModel 使用的是 int 而不是可为空的值:

    public Nullable<int> PackStat00
    

    public int? PackStat00
    

    目前,无法在视图模型中为这些字段存储空值。

    【讨论】:

    • 就是这样。谢谢!如果可以的话,我会将此标记为正确答案。
    • 是的。这就是问题所在。对 int 字段有一个隐含的“必需”验证,因为它们不可为空且没有默认值。
    • 最好不要将其视为隐式必需属性。更准确地说,这是一个模型绑定验证错误。活页夹告诉您尝试将空字符串转换为 int 失败,因此出现验证错误。如果您在其中一个编辑器中输入“Dog”,您会看到相同的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多