I have added textbox on the page that Jquery to create a datepicker. The problem is that, the textbox doesn’t hold the value after a postback. After researching, I found the following solution which works perfectly, i.e. the textbox keeps its value after a postback.
<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>
And this is the Jquery code
//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")));
}
});
}
Now I have a different type of problem. I can’t use a RequiredFieldValidator for a HiddenField as I am getting an error “Hidden Field cannot be validate“.
I’m tryind a CustomValidator, but the problem is that this control does acts only when the ControlToValidate is not empty.
I’ve checked all the property for RequiredFieldValidator and don’t see something like ClientValidationFunction property.
Any suggestion on how to solve that problem?
(Based on the comment by @Richard77, I will make this an actual answer.)
You have a several options…
Instead of using a
<asp:Hidden>, use a normal<asp:TextBox>but hide it usingstyle='display:none;attribute. This will allow you to use the<asp:RequiredFieldValidator>as per your needs.Another way to do it is using the
<asp:CustomValidator>and add theValidateEmptyText='true'attribute. This will force the validator to run the code even when the TextBox is empty.Update – after thinking about this, I would NOT recommend the following, because it’s not possible (that I can think of) to override the server-side version of the function, and therefore will leave you open to vulnerabilities. It’s fine to do if you’re purely using it for say visual reasons, and don’t need the actual data to be checked on the server – however, this is an unusual situation.
A final option (but not one that I would necessarily recommend) is to override the function generated by ASP.NET. This would need to be placed on your page somewhere after the script link generated by ASP.NET, something like…