验证不适用于 mvc5 中的下拉菜单
Validation does not apply to dropdowns in mvc5
注意以下代码。
我的问题是,自从将 mvc4 升级到 mvc5 后,下拉验证未正确完成。在下面的代码中,虽然我在模型中设置了下拉菜单是强制性的,但是如果用户没有 select 它,它不会给用户任何错误,并将在数据库中保存金额为零。
下拉菜单的样式已选择-jquery
我的模特:
[Required(ErrorMessage = "*")]
public int PaymentTypeID { get; set; }
我的代码:
<html>
<head>
<script src="/Scripts/jquery-3.3.1.min.js" type="text/javascript"></script>
</head>
<body>
<div class="row">
<div class="col-md-1">
@Html.LabelFor(model => model.PaymentTypeID, new { @class = "control-lable" })
</div>
<div class="col-md-3">
@Html.DropDownListFor(model => model.PaymentTypeID, (SelectList)(ViewData["PaymentTypelist"]), "Choose..", new { @class = "form-control chosen-select" })
</div>
<div class="col-md-2">
@Html.ValidationMessageFor(model => model.PaymentTypeID)
</div>
</div>
<script src="/Scripts/Menu/html5shiv.js" type="text/javascript"></script>
<script src="/Scripts/jquery-ui-1.12.1.min.js" type="text/javascript"></script>
<script src="/Scripts/Menu/actions.js" type="text/javascript"></script>
<script src="/Scripts/Menu/jquery.cookies.2.2.0.min.js" type="text/javascript"></script>
<script src="/Scripts/bootstrap.min.js" type="text/javascript"></script>
<script src="/Scripts/fontawesome-all.js"></script>
<script src="/Scripts/modernizr-2.0.6-development-only.js" type="text/javascript"></script>
<script src="/Scripts/enquire.js" type="text/javascript"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.pnotify.min.js" type="text/javascript"></script>
<script src="/Scripts/placeholdr.js" type="text/javascript"></script>
<script src="/Scripts/respond.min.js" type="text/javascript"></script>
<script src="/Scripts/chosen.jquery.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="/Scripts/knockout-3.4.2.js" type="text/javascript"></script>
<script src="/Scripts/attachfiles.js"></script>
<script src="/Scripts/jquery-ui-datetimepicker.min.js" type="text/javascript"></script>
</body>
</html>
RequiredAttribute
属性指定当验证表单上的字段时,该字段必须包含一个值。如果 属性 为 null
、包含空字符串 ("") 或仅包含 white-space 个字符,则会引发验证异常。
因此 [Required]
仅适用于可空类型。尝试使用 Nullable<int>
或 int?
而不是 int
.
[Required(ErrorMessage = "*")]
public int? PaymentTypeID { get; set; }
如果您不想使用@Mannan Bahelim 提供的上述可空类型,那么您可以使用此范围属性,它只允许大于零的整数。
[Range(1, Int32.MaxValue, ErrorMessage = "*")]
注意以下代码。 我的问题是,自从将 mvc4 升级到 mvc5 后,下拉验证未正确完成。在下面的代码中,虽然我在模型中设置了下拉菜单是强制性的,但是如果用户没有 select 它,它不会给用户任何错误,并将在数据库中保存金额为零。
下拉菜单的样式已选择-jquery
我的模特:
[Required(ErrorMessage = "*")]
public int PaymentTypeID { get; set; }
我的代码:
<html>
<head>
<script src="/Scripts/jquery-3.3.1.min.js" type="text/javascript"></script>
</head>
<body>
<div class="row">
<div class="col-md-1">
@Html.LabelFor(model => model.PaymentTypeID, new { @class = "control-lable" })
</div>
<div class="col-md-3">
@Html.DropDownListFor(model => model.PaymentTypeID, (SelectList)(ViewData["PaymentTypelist"]), "Choose..", new { @class = "form-control chosen-select" })
</div>
<div class="col-md-2">
@Html.ValidationMessageFor(model => model.PaymentTypeID)
</div>
</div>
<script src="/Scripts/Menu/html5shiv.js" type="text/javascript"></script>
<script src="/Scripts/jquery-ui-1.12.1.min.js" type="text/javascript"></script>
<script src="/Scripts/Menu/actions.js" type="text/javascript"></script>
<script src="/Scripts/Menu/jquery.cookies.2.2.0.min.js" type="text/javascript"></script>
<script src="/Scripts/bootstrap.min.js" type="text/javascript"></script>
<script src="/Scripts/fontawesome-all.js"></script>
<script src="/Scripts/modernizr-2.0.6-development-only.js" type="text/javascript"></script>
<script src="/Scripts/enquire.js" type="text/javascript"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.pnotify.min.js" type="text/javascript"></script>
<script src="/Scripts/placeholdr.js" type="text/javascript"></script>
<script src="/Scripts/respond.min.js" type="text/javascript"></script>
<script src="/Scripts/chosen.jquery.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="/Scripts/knockout-3.4.2.js" type="text/javascript"></script>
<script src="/Scripts/attachfiles.js"></script>
<script src="/Scripts/jquery-ui-datetimepicker.min.js" type="text/javascript"></script>
</body>
</html>
RequiredAttribute
属性指定当验证表单上的字段时,该字段必须包含一个值。如果 属性 为 null
、包含空字符串 ("") 或仅包含 white-space 个字符,则会引发验证异常。
因此 [Required]
仅适用于可空类型。尝试使用 Nullable<int>
或 int?
而不是 int
.
[Required(ErrorMessage = "*")]
public int? PaymentTypeID { get; set; }
如果您不想使用@Mannan Bahelim 提供的上述可空类型,那么您可以使用此范围属性,它只允许大于零的整数。
[Range(1, Int32.MaxValue, ErrorMessage = "*")]