0

これは私を悩ませ始めており、グーグルは私のために働く結果を出していないようです.

ボタンがポストバックを引き起こすと常にテキストをクリアする ASP.NET Textbox に JQueryUI Calendar があります。

次の Javascript はカレンダーを作成します

<script language="javascript" type="text/javascript">
    $(function () {
        $('#TextBoxDatePicker').datepicker({
            changeMonth: true,
            changeYear: true,
            showOn: 'both',
            buttonImage: '../images/cal16.gif',
            buttonImageOnly: true
        });
        $('#TextBoxDatePicker').datepicker({ dateFormat: 'dd/MM/y' });
        $('#TextBoxDatePicker').datepicker('option', 'dateFormat', 'dd/MM/y');
        $('#TextBoxDatePicker').datepicker({ yearRange: '1900:2323' });
        $('#TextBoxDatePicker').datepicker('option', 'maxDate', '0');
        $('#TextBoxDatePicker').datepicker('option', 'minDate', '-90y');
        $('#TextBoxDatePicker').datepicker('option', 'yearRange', '1900:2323');
    });
</script>
<asp:TextBox ID="TextBoxDatePicker" runat="server" ClientIDMode="Static"></asp:TextBox>

また、Page_Load メソッドには次のものがあります

ScriptManager.RegisterStartupScript(this.ButtonRegister, typeof(string), "CalendarScript", @"
                            $(function () {
                                $('#TextBoxDatePicker').datepicker({
                                    changeMonth: true,
                                    changeYear: true,
                                    showOn: 'both',
                                    buttonImage: '../images/cal16.gif',
                                    buttonImageOnly: true
                                });
                                $('#TextBoxDatePicker').datepicker({ dateFormat: 'dd/MM/y' });
                                $('#TextBoxDatePicker').datepicker('option', 'dateFormat', 'dd/MM/y');
                                $('#TextBoxDatePicker').datepicker({ yearRange: '1900:2323' });
                                $('#TextBoxDatePicker').datepicker('option', 'maxDate', '0');
                                $('#TextBoxDatePicker').datepicker('option', 'minDate', '-90y');
                                $('#TextBoxDatePicker').datepicker('option', 'yearRange', '1900:2323');
                            });", true);

テキストボックスを再作成するためにさまざまなオプションを試しましたが、どれも機能していないようです。

  • テキスト値をセッションに入れ、ページの読み込み時にテキストボックスに入力する
  • 値を属性値として追加する
  • 「var jobValue = document.getElementsByName('TextBoxDatePicker')[0].value; $('#TextBoxDatePicker').datepicker('setDate', jobValue);」を追加 ジャバスクリプトに。

問題は、RegisterStartupScript が毎回値を消去することに関係していると思いますが、それをどのように回避するかはわかりません。

ポストバックでテキストボックスの値がクリアされるのを止めるには、どんな助けも大歓迎です。

前もって感謝します。

4

1 に答える 1

0

さて、私はこれを自分で解決することができました。以下は私がやったことです。うまくいけば、これは将来誰かを助けるでしょう。

ScriptManager.RegisterStartupScript が問題であることがわかりました。ページの読み込み後に毎回値が消去されていました。これに対抗するために、Page_Load メソッドのスクリプトを次のように変更しました...

string CalendarScript = @"
                            $(function () {
                                $('#TextBoxDatePicker').datepicker({
                                    changeMonth: true,
                                    changeYear: true,
                                    showOn: 'both',
                                    buttonImage: '../images/cal16.gif',
                                    buttonImageOnly: true
                                });
                                $('#TextBoxDatePicker').datepicker({ dateFormat: 'ddMy' });
                                $('#TextBoxDatePicker').datepicker('option', 'dateFormat', 'ddMy');
                                $('#TextBoxDatePicker').datepicker({ yearRange: '1900:2323' });
                                $('#TextBoxDatePicker').datepicker('option', 'maxDate', '0');
                                $('#TextBoxDatePicker').datepicker('option', 'minDate', '-90y');
                                $('#TextBoxDatePicker').datepicker('option', 'yearRange', '1900:2323');";

        if (IsPostBack && TextBoxDatePicker.Text != String.Empty)
            CalendarScript += "$('#TextBoxDatePicker').datepicker('setDate', '" + TextBoxDatePicker.Text +"');";

        CalendarScript += "});";

        ScriptManager.RegisterStartupScript(this.ButtonRegister, typeof(string), "CalendarScript", CalendarScript, true);

基本的に、値がある場合、日付ピッカーの値をテキストボックスの値と等しくなるように設定しています。したがって、ポストバックがあるときはいつでも、その値が保持されます。

于 2013-05-28T11:18:19.297 に答える