Javascript JQuery对字段数组进行不引人注目的验证-仅连接到第一个字段?
我一直坚持在字段数组中添加自定义的不引人注目的验证——数据验证属性只连接到第一个元素(索引为0)。你能帮个忙吗?谢谢 服务器端:Javascript JQuery对字段数组进行不引人注目的验证-仅连接到第一个字段?,javascript,jquery,asp.net-mvc,validation,unobtrusive-validation,Javascript,Jquery,Asp.net Mvc,Validation,Unobtrusive Validation,我一直坚持在字段数组中添加自定义的不引人注目的验证——数据验证属性只连接到第一个元素(索引为0)。你能帮个忙吗?谢谢 服务器端: public IEnumerable GetClientValidationRules(ModelMetadata元数据,ControllerContext上下文) { string errorMessage=ErrorMessageString; ModelClientValidationRule timeLessThanRule=新ModelClientValid
public IEnumerable GetClientValidationRules(ModelMetadata元数据,ControllerContext上下文)
{
string errorMessage=ErrorMessageString;
ModelClientValidationRule timeLessThanRule=新ModelClientValidationRule();
timeLessThanRule.ErrorMessage=错误消息;
timeLessThanRule.ValidationType=“timelessthan”;
timeLessThanRule.ValidationParameters.Add(“otherpropertyname”,\u otherpropertyname);
收益-回报-时间法则;
}
视图:
(int i=0;i<7;i++)
{
@Html.HiddenFor(x=>Model.StoreWorkingHours.FirstOrDefault(y=>(int)y.DayInWeek==i+1&&y.IntervalInDay==IntervalInDay.IntervalOne).Id,新的{@Id=“StoreWorkingHours”+i+“\uu Id”,Name=“StoreWorkingHours[“+i+”].Id})
@Html.HiddenFor(x=>Model.StoreWorkingHours.FirstOrDefault(y=>(int)y.DayInWeek==i+1&&y.IntervalInDay==IntervalInDay.IntervalOne).DayInWeek,新的{@id=“StoreWorkingHours”+i+“\uu DayInWeek”,Name=“StoreWorkingHours[“+i+”].DayInWeek”})
@Html.HiddenFor(x=>Model.StoreWorkingHours.FirstOrDefault(y=>(int)y.DayInWeek==i+1&&y.IntervalInDay==IntervalInDay.IntervalOne)。IntervalInDay,新的{@id=“StoreWorkingHours”+i+“u IntervalInDay”,Name=“StoreWorkingHours[“+i+”].IntervalInDay”})
@Html.TextBoxFor(x=>Model.StoreWorkingHours.FirstOrDefault(y=>(int)y.DayInWeek==i+1&&y.IntervalInDay==IntervalInDay.IntervalOne)。From,new{@class=“w-50 openedfrom”,“@id=”StoreWorkingHours_uu+i+“u From”,“Name=”StoreWorkingHours[“+i+”].From})
@Html.ValidationMessageFor(x=>Model.StoreWorkingHours.FirstOrDefault(y=>(int)y.DayInWeek==i+1&&y.IntervalInDay==IntervalInDay.IntervalOne).From,“,new{@data\u valmsg\u for=“StoreWorkingHours[“+i+]”From”})
@Html.TextBoxFor(x=>Model.StoreWorkingHours.FirstOrDefault(y=>(int)y.DayInWeek==i+1&&y.IntervalInDay==IntervalInDay.IntervalOne).Until,new{@class=“w-50 openeduntil”,“@id=”StoreWorkingHours_u+i+“u-Until”,“Name=”StoreWorkingHours[“+i+”)。Until“})
@Html.ValidationMessageFor(x=>Model.StoreWorkingHours.FirstOrDefault(y=>(int)y.DayInWeek==i+1&&y.IntervalInDay==IntervalInDay.IntervalOne).Until,“,new{@data_valmsg_for=”StoreWorkingHours[“+i+”。Until”})
}
自定义验证脚本:
$.validator.addMethod(“timelessthan”),函数(值、元素、参数){
变量索引=($(params).selector.split(“[”[1])。字符(0);
var tf=$(“#存储工作小时数”+索引+“#u直到”).val();
var tu=价值;
var至=新日期(“2014年1月1日”+tu);
var from=新日期(“2014年1月1日”+tf);
返回,直到<从;
});
$.validator.unobtrusive.adapters.add(“timelessthan”,[“otherpropertyname]”,函数(选项){
options.rules[“timelessthan”]=“#”+options.params.otherpropertyname;
options.messages[“timelessthan”]=options.message;
});
结果:
从视图中删除那些自定义的
htmlAttribute
。Razor会自动为您创建它
看法
这样做,您将看到它是否实际被调用。如果可以,我认为“#”+options.params.otherpropertyname
不会给出预期的结果。因此您也必须更改它
@for (int i = 0; i < 7; i++)
{
<div class="form-field">
@Html.HiddenFor(x => Model.StoreWorkingHours.FirstOrDefault(y => (int)y.DayInWeek == i + 1 && y.IntervalInDay == IntervalInDay.IntervalOne).Id)
@Html.HiddenFor(x => Model.StoreWorkingHours.FirstOrDefault(y => (int)y.DayInWeek == i + 1 && y.IntervalInDay == IntervalInDay.IntervalOne).DayInWeek)
@Html.HiddenFor(x => Model.StoreWorkingHours.FirstOrDefault(y => (int)y.DayInWeek == i + 1 && y.IntervalInDay == IntervalInDay.IntervalOne).IntervalInDay)
@Html.TextBoxFor(x => Model.StoreWorkingHours.FirstOrDefault(y => (int)y.DayInWeek == i + 1 && y.IntervalInDay == IntervalInDay.IntervalOne).From)
<span class="field-validation">@Html.ValidationMessageFor(x => Model.StoreWorkingHours.FirstOrDefault(y => (int)y.DayInWeek == i + 1 && y.IntervalInDay == IntervalInDay.IntervalOne).From)</span>
@Html.TextBoxFor(x => Model.StoreWorkingHours.FirstOrDefault(y => (int)y.DayInWeek == i + 1 && y.IntervalInDay == IntervalInDay.IntervalOne).Until)
<span class="field-validation">@Html.ValidationMessageFor(x => Model.StoreWorkingHours.FirstOrDefault(y => (int)y.DayInWeek == i + 1 && y.IntervalInDay == IntervalInDay.IntervalOne).Until)</span>
</div>
}
$.validator.addMethod("timelessthan", function (value, element, params) {
console.log("HI :)");
return false;
});
$.validator.unobtrusive.adapters.add("timelessthan", ["otherpropertyname"], function (options) {
options.rules["timelessthan"] = "#" + options.params.otherpropertyname;
options.messages["timelessthan"] = options.message;
});