【问题标题】:Stop JQueryUI Calendar clearing Asp.net Textbox on postback停止 JQueryUI 日历在回发时清除 Asp.net 文本框
【发布时间】:2013-05-23 09:43:37
【问题描述】:

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

我在 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 每次都擦除值有关,但我不确定如何解决这个问题。

如果在回发时阻止文本框值被清除,我们将不胜感激。

提前致谢。

【问题讨论】:

    标签: asp.net jquery-ui c#-4.0 calendar postback


    【解决方案1】:

    好的,我自己设法解决了这个问题。 以下是我所做的,希望这对将来的其他人有所帮助。

    事实证明 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);
    

    基本上我将日期选择器的值设置为等于文本框的值(如果它有一个值)。因此,只要有回发,它就会保留该值。

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 1970-01-01
      • 2012-05-05
      • 2011-05-13
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多