asp.net mvc3,为什么dataannotation在没有Validator属性的情况下验证?

时间:2012-05-09 16:57:56

标签: asp.net-mvc-3 data-annotations

我有一个简单的ViewModel

public class ProductViewModel
{
    [Required(ErrorMessage = "This title field is required")]
    public string Title { get; set; }
    public double Price { get; set; }
}

这是基于此视图模型的表单。

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>ProductViewModel</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Title)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Title)
        @Html.ValidationMessageFor(model => model.Title)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Price)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Price)
        @Html.ValidationMessageFor(model => model.Price)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

}

我不想验证价格字段。但它自动验证,如果没有输入,将显示此字段是必需的。我注意到我用双倍的价格。如果我把它改成“字符串”。验证已删除。为什么键入“double”导致自动验证?

2 个答案:

答案 0 :(得分:1)

  

我不想验证价格字段。但它自动验证,如果没有输入,将显示此字段是必需的

因为double是值类型,不能为null。如果您希望该值不允许值,请在模型上使用nullable double:double?

public class ProductViewModel
{
    [Required(ErrorMessage = "This title field is required")]
    public string Title { get; set; }
    public double? Price { get; set; }
}

答案 1 :(得分:1)

因为double是值类型,并且不能为null。您可以将其设为double?Nullable<double>,就可以了。