0

这个开始困扰我,谷歌搜索似乎并没有为我提供工作结果。

我在 ASP.NET 文本框上有一个 JQueryUI 日历,当按钮导致回发时,它总是清除文本。

以下 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);” 到 javascript。

我认为问题与 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);

本质上,我将 datepicker 的值设置为等于文本框的值(如果它有值)。因此,只要有回发,它就会保留该值。

于 2013-05-28T11:18:19.297 回答