1

我在 Jquery 创建日期选择器的页面上添加了文本框。问题是,文本框在回发后不保存该值。经过研究,我发现以下解决方案非常有效,即文本框在回发后保持其值。

<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属性的东西。

关于如何解决该问题的任何建议?

4

1 回答 1

2

(根据@Richard77 的评论,我会将其作为实际答案。)

你有几个选择...

不要使用 a <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))
  }
}
于 2013-02-07T19:22:08.303 回答