Hejsan! Är inte svar på din fråga men istället för att bygga en egen calendar-kontroll så kanske den kontroll som ingår i ASP.NET AJAX Toolkit kan passa för dig? Finns att beskåda på http://ajax.asp.net/ajaxtoolkit/Calendar/Calendar.aspx Nej det var ingen svar på min fråga;) OK, då får jag försöka hjälpa dig med din kontroll istället då :-) Hej! När man registrerar scriptblock bör man alltid använda ett script-id så att man kan kolla om ett script redan är registrerat innan man försöker lägga till det. En av överlagringarna för Register-metoderna tillåter att man ger scripttillägget ett unikt namn. Sedan finns det en metod för att se om ett visst script redan är registrerat så att man kan undvika att försöka lägga till script som redan registrerats.Dropdown calender
Jag försöker göra en dropdown kalender och hittade en bra artikel här på Pellesoft om detta(http://www.pellesoft.se/area/articles/article.aspx?artid=816). Fast i artikeln så gjordes kontrollen i asp.net 1.1 och jag vill göra den i 2.0. En metod som används i artikeln är Page.RegisterClientScriptBlock() men denna finns inte längre i asp.net 2.0.
Har letat runt på nätet och kommit fram till att de har byggt om metoden och den ser ut som följer:
Dim instance As ClientScriptManager
Dim type As Type
Dim key As String
Dim script As String
instance.RegisterClientScriptBlock(type, key, script).
Jag har försökt att bygga om kontrollen med den nya metoden men har inte fått det att fungera.
Så här har jag gjort:
-----CalenderDropDownControl.ascx ------
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="CalenderDropDownControl.ascx.vb" Inherits="ASCX_CalenderDropDownControl" %>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="btnGetDate" Text="..." Runat="server" /><br>
<div id="div<%=Me.ID%>" style="visibility: hidden; POSITION: absolute">
<asp:Calendar id="Calendar1" runat="server" BorderWidth="2px"
BackColor="White" Width="200px"
ForeColor="Black" Height="180px" Font-Size="8pt"
Font-Names="Verdana" BorderColor="#999999"
BorderStyle="Outset" DayNameFormat="FirstLetter" CellPadding="4">
<TodayDayStyle ForeColor="Black" BackColor="#CCCCCC"></TodayDayStyle>
<SelectorStyle BackColor="#CCCCCC"></SelectorStyle>
<NextPrevStyle VerticalAlign="Bottom"></NextPrevStyle>
<DayHeaderStyle Font-Size="7pt" Font-Bold="True" BackColor="#CCCCCC"></DayHeaderStyle>
<SelectedDayStyle Font-Bold="True" ForeColor="White" BackColor="#666666"></SelectedDayStyle>
<TitleStyle Font-Bold="True" BorderColor="Black" BackColor="#999999"></TitleStyle>
<WeekendDayStyle BackColor="#FFFFCC"></WeekendDayStyle>
<OtherMonthDayStyle ForeColor="#808080"></OtherMonthDayStyle>
</asp:Calendar>
</div>
-----CalenderDropDownControl.ascx.vb ------
Public ReadOnly Property GetDate() As String
' Get
' Return Me.TextBox1.Text
' End Get
End Property
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim OnClick As String
Dim CSM As ClientScriptManager = Page.ClientScript
Dim type As Type = Me.GetType()
OnClick = "function OnClick(id)" & vbCrLf & _
"{" & vbCrLf & _
" if( isVisible(id) ) {" & vbCrLf & _
" hidelayer(id);" & vbCrLf & _
" } else {" & vbCrLf & _
" showlayer(id);" & vbCrLf & _
" }" & vbCrLf & _
"}" & vbCrLf
CSM.RegisterClientScriptBlock(type, "SwitchCalendar", _
"<script language='JavaScript'>" & vbCrLf & _
OnClick & vbCrLf & _
"</script>" & vbCrLf)
'Page.RegisterClientScriptBlock("SwitchCalendar", _
' "<script language='JavaScript'>" & VbCrLf & _
' OnClick & VbCrLf & _
' "</script>" & VbCrLf)
btnGetDate.Attributes.Add("OnClick", "OnClick('div" & Me.ID & "');return false;")
End Sub
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
TextBox1.Text = Calendar1.SelectedDate.ToShortDateString()
Dim div As System.Web.UI.Control = Page.FindControl("divCalendar")
If TypeOf div Is HtmlGenericControl Then
CType(div, HtmlGenericControl).Style.Add("display", "none")
End If
End Sub
---------ASPX sida----------------
<%@ Register TagPrefix="PDC" TagName="CalenderDropDownControl"
Src="CalenderDropDownControl.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="CalendarTest.aspx.vb" Inherits="pdc.CalendarTest" %>
<HTML>
<HEAD>
<title>CalendarTest</title>
<script language="javascript" src="include/functions.js"></script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<PDC:CalendarDropDownControl ID="myCal1" runat="server" /><br><br>
<PDC:CalendarDropDownControl ID="myCal2" runat="server" /><br><br>
<asp:Button Text="Submit" Runat="server" id="Button1" /><br><br>
<asp:Label ID="lblResult" Runat="server" />
</form>
</body>
</HTML>
------------------------------------
har även lagt till den js filen som finns i artikeln.
Har jag använt den nya metoden på fel sätt kanske, hoppas att något vet bättre.Sv: Dropdown calender
Sv:Dropdown calender
Jag har kollat på de kontrollerna också och använt mig utav dem, det var bara av ren nyfikenhet som jag försökte återskapa den kontrollen som beskrevs i artikeln men sen blev jag irriterad när jag inte får det att fungera så jag ligger sömnlös om nätterna;)Sv: Dropdown calender
Till att börja med, Page.RegisterClientScriptBlock finns fortfarande kvar i ASP.NET 2.0 men är satt som obsolete vilket innebär att det finns ett nyare och antagligen bättre alternativ till den här funktionen. I det här fallet så kan du då istället skriva:
<code>
Page.ClientScript.RegisterClientScriptBlock(Me.GetType, "SwitchCalendar", _
"<script language='JavaScript'>" & vbCrLf & _
OnClick & vbCrLf & _
"</script>" & vbCrLf)
</code>
Du behöver alltså inte, eller ska kanske inte, använda dig av ClientScriptManager här. Jag har testat med koden på sidan och det funkar bra.
/MartinSv:Dropdown calender
Jo jag provade med det som du skrev innan jag använde mig av ClientScriptManager men eftersom det inte fungerade så började jag använda ClientScriptManager.
Men jag tror att jag kommit på varför det inte fungerar. Jag stressade nog lite snabbt fram utan att tänka efter, det har nog fungerat hela vägen för mig. Problemet var att sidan som jag använde scriptet på hela tiden laddade om sig så kontrollen började om hela tiden innan jag hann se något. ;)
Men tack för att du tog dig tid
//PatrikSv: Dropdown calender