Мне очень понравился элемент управления календаря SubSonic 2.2. Это реализация .Net старого календаря Динарха, найденная здесь .
Итак, я сделал то, что сделал бы любой разработчик, и пролистал весь код календаря и поместил его в свою собственную библиотеку.
К сожалению, календарь не очень хорошо работает с панелью обновлений.
Я получил помощь здесь для получения календаря, работающего на панели обновлений, однако у меня все еще остается проблема, когда календарь находится на панели обновлений и не отображается при первом запросе теги сценария, указывающие на JavaScript файлы не отображаются.
Вот код, который делает это.
protected override void OnPreRender(EventArgs e)
{
string csslink = "<link href='" + Page.ClientScript.GetWebResourceUrl(GetType(), IncludeAssemblyPrefix + "skin.theme.css") + "' rel='stylesheet' type='text/css' />";
Page.Header.Controls.Add(new LiteralControl(csslink));
Page.ClientScript.RegisterClientScriptInclude("CalendarMain", Page.ClientScript.GetWebResourceUrl(GetType(), IncludeAssemblyPrefix + "calendar.js"));
Page.ClientScript.RegisterClientScriptInclude("CalendarSetup", Page.ClientScript.GetWebResourceUrl(GetType(), IncludeAssemblyPrefix + "calendar-setup.js"));
string langPrefix = IncludeAssemblyPrefix + "lang.calendar-";
if (String.IsNullOrEmpty(Language))
Language = DEFAULT_LANGUAGE;
if (Assembly.GetExecutingAssembly().GetManifestResourceStream(langPrefix + Language + ".js") == null)
Page.ClientScript.RegisterClientScriptInclude("CalendarLanguage", Page.ClientScript.GetWebResourceUrl(GetType(), langPrefix + DEFAULT_LANGUAGE + ".js"));
else
Page.ClientScript.RegisterClientScriptInclude("CalendarLanguage", Page.ClientScript.GetWebResourceUrl(GetType(), langPrefix + Language + ".js"));
base.OnPreRender(e);
}
public string IncludeAssemblyPrefix { get { return Assembly.GetExecutingAssembly().GetName().Name + "."; } }
Итак, мой вопрос: как мне заставить работать вызовы RegisterClientScriptInclude, когда элемент управления не виден?