我一直在通过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]数据注释,我可以保持仅在提交表单时触发验证。