是否可以在表单提交上进行范围数据注释验证?

时间:2017-03-20 15:59:05

标签: c# forms validation range data-annotations

我一直在通过stackoverflow网站搜索我的问题的答案,但我找不到合适的解决方案。所以我希望我能以这种方式得到解决方案。

情况: 我有一个有几个领域的表格;其中2个是必需的:其中一个是EnumDropDownListFor,它有一个额外的“空”选项'。

问题: 下拉列表的验证会在下拉列表的更改事件/选择空选项时触发。

通缉行为: 仅在提交表单时验证下拉列表,而不是在更改事件上验证。

这是我的代码:

public class SearchOrderViewModel
{
    [Required]
    [Display(Name = "Supplier", ResourceType = typeof(SearchOrderStrings))]
    public string Supplier { get; set; }

    [Required]
    [Range(1, int.MaxValue, ErrorMessageResourceType = typeof(SearchOrderStrings), ErrorMessageResourceName = "OrderTypeRequired")]
    [Display(Name = "OrderType", ResourceType = typeof(SearchOrderStrings))]
    public OrderTypeEnum OrderType { get; set; }

    [Display(Name = "PurchasingReason", ResourceType = typeof(SearchOrderStrings))]
    public int PurchasingReason { get; set; }
}

public enum OrderTypeEnum
    {
        OpenOrder = 1,
        ClosedOrder = 2
    }

Index.cshtm

<div id="divExternalSupplierSearch" class="form-group">
    @Html.LabelFor(model => model.Supplier)
    @Html.ValidationMessageFor(model => model.Supplier)
    <div id="divDropdown">
        @Html.DropDownListFor(model => model.Supplier,
        Model.SupplierCodes, new { @class = "form-control" })
    </div>
</div>
<div id="divOrderTypes" class="form-group">
    @Html.LabelFor(model => model.OrderType)
    @Html.ValidationMessageFor(model => model.OrderType)
    <div id="divDropdown">
        @Html.EnumDropDownListFor(model => model.OrderType, new { @class = "form-control" })
    </div>
</div>
<div id="divPurchasingReasons" class="form-group">
    @Html.LabelFor(model => model.PurchasingReason)
    <div id="divDropdown">
        @Html.DropDownListFor(model => model.PurchasingReason, Model.PurchasingReasons, new { @class = "form-control" })
    </div>
</div>

如果需要更多信息,请与我们联系。

由于

编辑(解决方案):

通过结合@Elmer Dantas的答案和尝试一些事情,我发现通过删除[Range]数据注释并使我的SearchOrderViewModel中的OrderType属性可以为空,我可以成为想要的行为。

因此,此代码仅在提交表单时验证OrderType值:

[Required]
[Display(Name = "OrderType", ResourceType = typeof(SearchOrderStrings))]
public OrderTypeEnum? OrderType { get; set; }

显然

[Range(1, int.MaxValue, ErrorMessageResourceType = typeof(SearchOrderStrings), ErrorMessageResourceName = "OrderTypeRequired")]

data-annotation正在检查该值是否对下拉列表的更改事件有效。通过使属性可以为空并且只保留[Required]数据注释,我可以保持仅在提交表单时触发验证。

0 个答案:

没有答案
相关问题