webForumDet fria alternativet

Hämta id/Namn?

.NETur .NET

9 svar · 337 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#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?

Medlem sedan jan. 20001 372 inlägg
#2

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=\"...\"/>")
		}
	}
}
Medlem sedan nov. 20017 144 inlägg
#3

Ok, det där är för en anpassad kontroll eller?
Ursäkta att jag är lite novis här va.... :OO

Medlem sedan jan. 20001 372 inlägg
#4

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?

Medlem sedan nov. 20017 144 inlägg
#5

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" />
Medlem sedan jan. 20001 372 inlägg
#6

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.

Medlem sedan nov. 20017 144 inlägg
#7

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()
Medlem sedan jan. 20001 372 inlägg
#8

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

Medlem sedan nov. 20017 144 inlägg
#9

Det fick bli en massa kodrenderingsblock.
Känns inte helt bra med det funkar.
Tack DavidB!

Medlem sedan nov. 20017 144 inlägg
#10

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" />
139 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)