【发布时间】:2013-04-10 16:29:21
【问题描述】:
我有 2 个字段:
名字
姓氏
并且只需要其中一项。但如果两者都被省略,我希望这两个字段都被突出显示。如果其中一个填写,则模型没问题,应该提交表单。
如何做到这一点?
【问题讨论】:
标签: c# asp.net-mvc model-view-controller
我有 2 个字段:
名字
姓氏
并且只需要其中一项。但如果两者都被省略,我希望这两个字段都被突出显示。如果其中一个填写,则模型没问题,应该提交表单。
如何做到这一点?
【问题讨论】:
标签: c# asp.net-mvc model-view-controller
所有复杂的验证都从继承自 IValidatableObject 的视图模型开始。然后您覆盖 Validate 并输入您自己的验证规则。
IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
{
if (String.IsNullOrWhiteSpace(FirstName) && String.IsNullOrWhiteSpace(LastName))
{
yield return new ValidationResult("A name must be entered.", new string[] { "FirstName", "LastName" });
}
}
请注意,这仅确保此规则的服务器端验证。如果你想要它在客户端,你需要编写自己的 JavaScript / jQuery 代码来处理验证。
【讨论】:
new string[] { "FirstName", "LastName" } 参数告诉调用代码哪个字段未通过验证。
你可以使用this library,它会帮助你做这样的事情
[RequiredIf("PropertyValidationDependsOn", true)]
public string PropertyToValidate { get; set; }
【讨论】:
如果您愿意在客户端执行此操作 这可能会给你一个开始
HTML
<input type="text" class="name" id="firstName" />
<input type="text" class="name" id="lastName" />
<input type="button" id="btnSubmit" value="submit" />
按钮点击事件
$("#btnSubmit").click(function () {
var isValid = false;
$("input[class='name']").each(function (key, keyValue) {
//alert(keyValue.value);
if (keyValue.value.length > 0) {
isValid = true;
$(this).css("background", "White");
}
else {
$(this).css("background", "RED");
}
})
if (!isValid) {
// do something
}
});
如果没有通过验证,防止表单提交
$('input[type=submit]').bind('click', function(e) {
var isValid = false;
$("input[class='name']").each(function (key, keyValue) {
//alert(keyValue.value);
if (keyValue.value.length > 0) {
isValid = true;
$(this).css("background", "White");
}
else {
$(this).css("background", "RED");
}
})
if (!isValid) {
e.preventDefault() // prevents the form from being submitted
}
});
【讨论】: