2009-09-17 4 views
2

Как embbed все сценарии, необходимые CalendarBehavior на странице, фактически с помощью элемента управления на стороне сервера (CalendarExtender). Причина, по которой я не могу использовать расширитель на стороне сервера, заключается в том, что у меня есть страница с, возможно, сотнями элементов управления Date; Я хочу, чтобы вы могли лениво загружать календари по мере необходимости (когда пользователь нажимает на элемент управления).всплывающее CalendarBehavior от Javascript

Код, который создает календарь из JavaScript заключается в следующем:

cal = $create(AjaxControlToolkit.CalendarBehavior, 
    { 'id': owner.id + '_calendar', 'cssClass': 'calExt', 'format': format }, 
    null, null, owner); 

Проблема заключается в том, что без учета всех необходимых JS от AjaxControlToolkit ресурсов, он будет бросать ошибку:

AjaxControlToolkit is undefined. 

большое спасибо,

Флорин С.

ответ

1

Я нашел следующий хак, который зарегистрирует все скрипты и ссылки css, выставленные CalendarExtender. Я думаю, что решение является универсальным, так что он может быть использован с другими наполнителями:

ScriptManager manager = ScriptManager.GetCurrent(Page); 
if (manager != null) 
{ 
    foreach (ScriptReference reference in ScriptObjectBuilder.GetScriptReferences(typeof(CalendarExtender))) 
    { 
    manager.Scripts.Add(reference); 
    } 
    CalendarExtender extender = new CalendarExtender(); 
    Page.Form.Controls.Add(extender); 
    ScriptObjectBuilder.RegisterCssReferences(extender); 
    Page.Form.Controls.Remove(extender); 
} 

Экземпляр временного расширителя необходим для RegisterCssReferences вызова, в противном случае он выдаст сообщение об ошибке.

Это работает, но YMMV.