0

我正在开发一个服务器自定义控件 (.NET),一个带有 jQ​​ueryUI 插件的“DatePicker”。所以,我有下一个脚本,它作为 webResource 加载:

JavaScript

$(function () {
    $("#" + ctrlInput).datepicker({
        maxDate: MaxDate,
        minDate: MinDate
    });
});

如您所见,我有 javascript 变量,因此,为了加载脚本和变量,我执行以下操作:

C#

        string javascriptVariables = String.Format(
            "var MinDate = '{0}'; var MaxDate = '{1}'; var ctrlInput = '{2}';",
            MinDate ?? DateTime.MinValue.ToShortDateString(), 
            MaxDate ?? DateTime.MaxValue.ToShortDateString(),
            _textBox.ClientID
        );

        // Load javascript variables (it will be load every time i add a control)
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "dateValues" + _textBox.ClientID, javascriptVariables, true);

        // Load jQueryPlugin (it is loaded only once, and this is the problem)
        Page.ClientScript.RegisterClientScriptResource(this.GetType(), "[[resourceName]]");

它工作正常。问题是当我多次将此控件添加到页面时

这是因为脚本变量加载得很好,但是 RegisterClientScriptResource 没有再次加载 jQuery 插件!而且我不知道如何强制加载!因为我无法将资源键设置为RegisterClientScriptResource

有谁知道如何解决这个问题?

谢谢

4

1 回答 1

0

我不认为你以正确的方式解决问题。

  • 使用全局变量(在 js 中)尤其是当它们实际上只在本地使用时是一个非常糟糕的主意资源
  • 多次加载 jQuery 或 jQuery 插件也可能是错误的来源。资源

我要做的是考虑另一种将变量传递给您的javascript的方法,例如数据属性。

您可能从服务器控件生成了一个 html 输入,为您的日期添加数据属性:

<input type="text" ... data-mindate="01/01/2013" data-maxdate="12/31/2013" />

下一步是,不要将全局变量提供给 datepicker 函数,而是使用数据属性:

$('#whatever').data('mindate');

或者

$('#whatever').attr('data-mindate');

还有一个快速演示:http: //jsfiddle.net/JjemN/

于 2013-07-03T15:17:50.657 回答