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")));
    }
  });
}

今、私は別のタイプの問題を抱えています。「非表示フィールドを検証できません」というエラーが発生するため、HiddenFieldにRequiredFieldValidatorを使用できません。

CustomValidatorを試していますが、問題は、ControlToValidateが空でない場合にのみこのコントロールが機能することです。

RequiredFieldValidatorのすべてのプロパティを確認しましたが、 ClientValidationFunctionプロパティのようなものが表示されません。

その問題を解決する方法について何か提案はありますか?

4

1 に答える 1

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))
  }
}
于 2013-02-07T19:22:08.303 に答える