自定义控件和Web资源(脚本)

时间:2013-07-03 14:59:07

标签: asp.net .net

我正在开发一个服务器自定义控件(.NET),一个带有jQueryUI插件的“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

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

由于

1 个答案:

答案 0 :(得分:0)

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

  • 使用全局变量(在js中),特别是当它们实际上只在本地使用时,这是一个非常坏主意source
  • 不止一次加载jQuery或jQuery插件也可能是bug的来源。 source

我要做的是考虑另一种将变量传递给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/