我在Jquery的页面上添加了文本框来创建一个datepicker。问题是,文本框在回发后不保留值。经过研究,我发现following solution完美无缺,即文本框在回发后保持其值。
<th>
<asp:CustomValidator ID="customStartDate" runat="server"
ErrorMessage="Start Date" Display = "None" ControlToValidate = "txtStartDate"
ValidationGroup ="HireGroup" ClientValidationFunction ="StartDate_Validate"/>
Start Date:
</th>
<td>
<asp:TextBox ID="txtStartDate" runat="server" Width = "140" ReadOnly = "true"
TabIndex = "5" CssClass = "datepicker" ></asp:TextBox>
<asp:HiddenField ID="hfDatePicker" runat="server"/>
</td>
这是Jquery代码
//Set datePicker
function SetUpDatePicker() {
var $allDatepickers = $('.datepicker');
$.each($allDatepickers, function () {
$(this).datepicker({
showOn: "button",
buttonImage: "Images/calendar.gif",
buttonImageOnly: true,
minDate: 1,
altField: '[id*="hfDatePicker"]'
});
var $hfDatePicker = $('[id*="hfDatePicker"]');
var val = $($hfDatePicker).attr('Value');
$(this).val(val);
var len = $($hfDatePicker).attr('Value').length;
if (len > 0) {
$(this).datepicker("setDate", new Date($($hfDatePicker).attr("Value")));
}
});
}
现在我有一个不同类型的问题。我无法使用RequiredFieldValidator作为HiddenField,因为我收到错误“隐藏字段无法验证”。
我正在尝试使用CustomValidator,但问题是此控件仅在 ControlToValidate 不为空时才起作用。
我已检查RequiredFieldValidator的所有属性,但看不到 ClientValidationFunction 属性。
关于如何解决这个问题的任何建议?
答案 0 :(得分:2)
(基于@ Richard77的评论,我会将其作为一个真正的答案。)
你有几个选择......
不使用<asp:Hidden>
,而是使用普通<asp:TextBox>
,但使用style='display:none;
属性隐藏它。这样您就可以根据需要使用<asp:RequiredFieldValidator>
。
另一种方法是使用<asp:CustomValidator>
并添加ValidateEmptyText='true'
属性。即使TextBox为空,这也会强制验证程序运行代码。
更新 - 考虑到这一点后,我不推荐以下内容,因为我无法(我能想到)覆盖该功能的服务器端版本,因此会离开你容易受到漏洞的影响。如果您出于视觉原因纯粹使用它,并且不需要在服务器上检查实际数据,那么这很好。但是,这是一种不寻常的情况。
最终选项(但不是我必须推荐的选项)是覆盖ASP.NET生成的函数。在ASP.NET生成的脚本链接之后,需要将它放在您的页面上,类似于......
function RequiredFieldValidatorEvaluateIsValid(val) {
if(val.controltovalidate=="myValidatorId"){
// your coding here
} else {
return (ValidatorTrim(ValidatorGetValue(val.controltovalidate)) != ValidatorTrim(val.initialvalue))
}
}