Jesper T Medlem sedan nov. 2001 7 144 inlägg Frågan 29 nov. 2004 17:12 #1 Tänk er en användarkontroll som läggs in på detta sätt:
<myProject:myControl id="[b]myId[/b]" runat="server" />
..
Som t.ex. blir:
<input type="text" id="[b]myId[/b]_txt" />
<input type="button" id="[b]myId[/b]_btn" value="..."/>
Hur skall jag då på bästa sätt överföra "myId" (i detta fall) till de olika elementen i min kontroll?
D DavidB Medlem sedan jan. 2000 1 372 inlägg om du ärver klassen Control i din kontroll så är det bara att använda sig utav ID
namespace MyNamespace {
public class MyControl : Control {
protected override void Render(HtmlTextWriter output){
output.Write("<input type=\"text\" id=\"[b]" + ID + "[/b]_txt\" />");
output.Write("<input type=\"button\" id=\"[b]" + ID + "[/b]_btn\" value=\"...\"/>")
}
}
}
Jesper T Medlem sedan nov. 2001 7 144 inlägg Ok, det där är för en anpassad kontroll eller?
Ursäkta att jag är lite novis här va.... :OO
D DavidB Medlem sedan jan. 2000 1 372 inlägg anpassad kontroll?
jag tror att i stort sett alla kontroller i asp.net ärver Control så om du ärver någon annan kontroll så fungerar ju det också.
annars kan du ju göra såhär istället:
public string id {
get{
return id;
} set{
id = value;
}
}
sen är det bara att använda sig utav id vart du vill ha det.
hur ser din kod ut?
Jesper T Medlem sedan nov. 2001 7 144 inlägg Det är en datepicker-calenderkontroll som jag vill kunna vara lite mer "dynamisk" (anväda på flera textfält)
<%@ Control Language="vb" %>
<script runat="server">
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
myJscript.Text = "<scr" & "ipt type=""text/javascript"">" & _
"function OnClick()" & _
"{document.getElementById(""divCalendar"").style.display=(document.getElementById(""divCalendar"").style.display)? ""block"" : ""none"";};" & _
"</scr" & "ipt>"
TextBox1.Text = Calendar1.SelectedDate.ToShortDateString()
End Sub
</script>
<asp:TextBox ID="TextBox1" Runat="server" />
<input type="button" id="button1" value="..." onclick="OnClick()">
<br />
<div id="divCalendar" style="display: none; position: absolute">
<asp:Calendar ID="Calendar1" Runat="server" />
</div>
<asp:Literal ID="myJscript" Runat="server" />
D DavidB Medlem sedan jan. 2000 1 372 inlägg Om jag inte minns helt fel så får ju varje kontroll ett eget id på .aspx sidan ändå.
Säg att du kör med din kod och lägger in:
<%@ Register TagPrefix="min" TagName="Kontroll" Src="minkotroll.ascx" %>
<min:Kontroll id="mk " runat="server"/>
på din .aspx sida så kommer dina kontroller inuti din kontroll att få följande namn:
mk .TextBox1
mk .button1
mk .Calendar1
mk .myJscript
när du vill ha tag på dem från din .aspx sida.
Jesper T Medlem sedan nov. 2001 7 144 inlägg Nja, nästan alla...
Literalen med javascriptet gör det inte, id:t skall ju även in i javascriptfunktionen function OnClick(id){...} .
Såg även att den måste läggas i page_load. :)
Och denna är ju statisk:
[b]TextBox1[/b].Text = [b]Calendar1[/b].SelectedDate.ToShortDateString()
D DavidB Medlem sedan jan. 2000 1 372 inlägg Okej,
Din user control ärver i alla fall automatiskt System.Web.UI.Control så då borde det räcka med att lägga in <%=ID%> där du vill ha ditt id
Jesper T Medlem sedan nov. 2001 7 144 inlägg Det fick bli en massa kodrenderingsblock.
Känns inte helt bra med det funkar.
Tack DavidB!
Jesper T Medlem sedan nov. 2001 7 144 inlägg Löste allt så här, så slapp jag dessa: <%%>
<%@ Control Language="vb" %>
<script runat="server">
Sub page_load(ByVal obj As Object, ByVal e As EventArgs)
myJscript.Text = _
"<script type=""text/javascript"">" & vbCr & _
"function OnClick_" & ID & "(){" & vbCr & _
"document.getElementById(""" & ID & "_picker"").style.display=(document.getElementById(""" & ID & "_picker"").style.display==""none"")? ""block"" : ""none"";};" & vbCr & _
"</scr" & "ipt>" & vbCr
mybtn.Attributes.Add("onclick", "OnClick_" & ID & "();")
End Sub
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles _cal.SelectionChanged
_txt.Text = _cal.SelectedDate.ToShortDateString()
End Sub
</script>
<asp:TextBox ID="_txt" Runat="server" />
<input type="button" runat="Server" id="mybtn" value="..." />
<br />
<div id="picker" runat="server" style="display: none; position: absolute">
<asp:Calendar ID="_cal" Runat="server" />
</div>
<asp:Literal ID="myJscript" Runat="server" />