如何在Razor页面中添加自定义验证?

时间:2013-03-14 20:03:35

标签: asp.net-mvc razor

我第一次使用MVC 4。我的业务逻辑有点复杂,但我想不会那么罕见。我有可以在特定范围内调整大小的项目。范围取决于项目。

public class MyItem
{
    public double Width { get; set; }

    public double MinWidth { get; set; }

    public double MaxWidth { get; set; }
}
用户设置时,

CustomWidth必须包含MinWidthMaxWidth。这似乎是一个常见的问题。我已经尝试了CustomValidation属性,但只有当我尝试将实体保存到我的数据库时才会验证(使用实体框架)。

这是我正在使用的Razor页面。

@using (Html.BeginForm("Action", "Controller", FormMethod.Post)) { 
<aside id="aside">
    <div class="editor-label">
        @Html.LabelFor(model => model.Width)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Width)
        @Html.ValidationMessageFor(model => model.Width)
    </div>  

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

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

    <input type="submit" value="save" />
</aside>
}

1 个答案:

答案 0 :(得分:5)

要进行自定义验证,您希望从IValidatableObject继承。

**注意在初始模型验证成功后将进行自定义验证

    public class MyItem : IValidatableObject
        {
            public double Width { get; set; }

            public double MinWidth { get; set; }

            public double MaxWidth { get; set; }
            public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
           {
                // Custom validation
           }

}

Example on how to use