以下模型具有某些参数的必需属性:
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>
我需要为long和lat参数添加验证,因为我不希望用户先保存而不选择位置。如此长,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)
无效。
答案 0 :(得分:1)
默认情况下,$.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
答案 1 :(得分:0)
鉴于Lat / Long可以是负数也可以是正数,我会建议填充一个不同的字段来表示已经选择了一个位置:
public float Long { get; set; }
public float Lat{ get; set; }
[MinValue(1, "Please select a location")
public int LatLongCheck { get; set; }
然后用你用来设置Lat&amp; amp;很长,你也可以将LatLongCheck的值设置为1(或其他)。
在链接中使用适用于您的任何技术(根据L-Four的评论)MVC : How to enable client side validation on hidden fields以启用客户端验证。
您还可以查看具有[NotEqualTo]
验证属性的Foolproof Validation,您可以使用该属性代替备用字段。最后,您可以考虑将Lat / Long值显示为readonly
字段,默认情况下会对其进行验证。
答案 2 :(得分:0)
您可以使用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; }
}