范围属性 MVC 的验证消息
本文关键字:验证 消息 MVC 属性 范围 | 更新日期: 2023-09-27 18:17:54
以下模型具有某些参数的必需属性:
public class EModel
{
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
[Required]
[Display(Name = "Tel")]
public string Phone { get; set; }
public float Long { get; set; }
public float Lat{ get; set; }
}
在我的视图中,我有姓名、电话和 2 个浮点参数:我保存在隐藏输入中的经度和纬度,它们由地图标记设置,以便稍后保存。
我正在验证所需的参数,如下所示:
<div>
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { placeholder = "Name" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "danger" })
</div>
<div>
@Html.EditorFor(model => model.Phone, new { htmlAttributes = new { placeholder = "Phone" } })
@Html.ValidationMessageFor(model => model.Phone, "", new { @class = "danger" })
</div>
<div>
@Html.HiddenFor(x => x.Long, new { @id = "Long"})
@Html.HiddenFor(x => x.Lat, new { @id = "Lat"})
</div>
<div>
<button type="submit">Save</button>
</div>
我需要为长整型和 lat 参数添加验证,因为我不希望用户在没有先选择位置的情况下保存。 这么长,纬度不应该小于 0.001,所以我添加了以下属性:
[Range(0.001, float.MaxValue)]
public float Long { get; set; }
[Range(0.001, float.MaxValue)]
public float Lat{ get; set; }
我想在提交点击时验证,Long 和 Lat 都不是 0.00。
我该怎么做? @Html.ValidationMessageFor(x=>x.Long)
没有用。
默认情况下,$.validator
不验证隐藏的输入。可以通过添加以下脚本来覆盖此行为
$.validator.setDefaults({
ignore: []
});
或者,如果您只想验证这两个隐藏输入并忽略其他隐藏输入,请为它们指定一个类名(例如new { @class = "coordinates" }
(并使用
$.validator.setDefaults({
ignore: ':hidden:not('.coordinates')'
});
另一种方法是将值生成为只读文本框,这也将向用户提供额外的反馈
@Html.TextBoxFor(x => x.Long, new { @readonly = "readonly"})
请注意,没有必要使用 new { @id = "Long"})
- 生成表单控件的HtmlHelper
方法已经基于属性的名称添加了 id
属性。
但是,范围验证实际上没有意义,因为零值和负值对坐标有效。如果要确保用户已选择位置(并且已通过脚本设置值(,请使属性nullable
并添加RequiredAttribute
[Required(ErrorMessage = "Please select a location")]
public float? Long { get; set; } // nullable
鉴于纬度/经度可以是负数,也可以是正数,我建议填充一个不同的字段以指示已选择位置:
public float Long { get; set; }
public float Lat{ get; set; }
[MinValue(1, "Please select a location")
public int LatLongCheck { get; set; }
然后,在用于设置 Lat & Long 的任何代码中,您还可以将 LatLongCheck 的值设置为 1(或其他任何值(。
在链接中使用任何适合您的技术(根据L-Four的评论( MVC :如何在隐藏字段上启用客户端验证以启用客户端验证。
您还可以查看万无一失的验证,它具有[NotEqualTo]
验证属性,您可以使用该属性代替替代字段。最后,您可以考虑将 Lat/Long 值显示为 readonly
字段,默认情况下会对其进行验证。
您可以使用 CSS 隐藏经纬度输入
<div style="visibility: hidden;">
@Html.EditorFor(model => model.Long, new { @id = "Long"})
@Html.EditorFor(model => model.Lat, new { @id = "Lat"})
</div>
<div>
@Html.ValidationMessageFor(model => model.Long)
@Html.ValidationMessageFor(model => model.Lat)
</div>
<小时 />并根据模型的要求进行设置
public class EModel
{
[Required]
[Range(0.001, float.MaxValue)]
[Display(Name = "Long")]
public string Long { get; set; }
[Required]
[Range(0.001, float.MaxValue)]
[Display(Name = "Lat")]
public string Lat { get; set; }
}