Avatar billede raos Nybegynder
11. november 2007 - 23:59 Der er 3 kommentarer og
1 løsning

Label.AssociatedControlID vs. CompositeControl

Jeg har lavet en meget simpel CompositeControl.


using System.Web.UI.WebControls;

namespace MyCustomControls
{
    public class MyCompositeControl : System.Web.UI.WebControls.CompositeControl
    {
        public string LabelText {
            get {
                Label lbl = (Label)FindControl("LabelID");
                return lbl.Text;
            }
            set {
                Label lbl = (Label)FindControl("LabelID");
                lbl.Text = value;

            }
        }

        public string Text
        {
            get
            {
                TextBox tb = (TextBox)FindControl("TextBoxID");
                return tb.Text;
            }
            set
            {
                TextBox tb = (TextBox)FindControl("TextBoxID");
                tb.Text = value;

            }
        }
        protected override void CreateChildControls()
        {
            TextBox tb = new TextBox();
            tb.ID = "TextBoxID";
            Label lbl = new Label();
            lbl.ID = "LabelID";
            lbl.AssociatedControlID = tb.ID;
            Controls.Add(lbl);
            Controls.Add(tb);
           
        }
    }
}


Når jeg bruger den på min aspx side:

<cc1:MyCompositeControl LabelText="Bare en test" Text='<%# Bind("Email") %>' ID="TestId"  runat="server" />

udskrives denne html:

<span id="ctl00_ContentPlaceHolder1_FormView1_TestId"><label class="" for="LabelID">Bare en test</label><br /><input name="ctl00$ContentPlaceHolder1$FormView1$TestId$TextBoxID" type="text" value="22" id="ctl00_ContentPlaceHolder1_FormView1_TestId_TextBoxID" /></span>

Som det ses er property'en "for" på "label" elementet forkert. Den burde være "ctl00_ContentPlaceHolder1_FormView1_TestId_TextBoxID" isteder for "LabelID"


Hvad har jeg gjort forkert

På forhånd tak
Avatar billede neoman Novice
12. november 2007 - 16:08 #1
Mystisk: har lige kørt din kode sådan her
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %>
<%@ Register TagPrefix="cc1" Namespace="MyCustomControls" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<cc1:MyCompositeControl LabelText="Bare en test" Text="myTest" ID="TestId"  runat="server" />
</asp:Content>


og får denne html ud

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
    Untitled Page
</title></head>
<body>
    <form name="aspnetForm" method="post" action="Default2.aspx" id="aspnetForm">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkzOTQ2OTg5NWRkgO1Crw+rzMcA08V4xjxfvmS3hcE=" />
</div>

    <div>
       


<span id="ctl00_ContentPlaceHolder1_TestId"><label for="ctl00_ContentPlaceHolder1_TestId_TextBoxID" id="ctl00_ContentPlaceHolder1_TestId_LabelID">Bare en test</label><input name="ctl00$ContentPlaceHolder1$TestId$TextBoxID" type="text" value="myTest" id="ctl00_ContentPlaceHolder1_TestId_TextBoxID" /></span>

    </div>
   
<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLn++eQBgLdz4bKBU/RudNvVsLUkSrlQ4vqWZedbGdJ" />
</div></form>
</body>
</html>

Nu sidder din control inde i en anden control, så måske skulle man kalde
.EnsureChildControls (jeg er lidt ude på et overdrev her , fordi jeg ikke har erfaring men gæt) :)
Avatar billede raos Nybegynder
12. november 2007 - 23:29 #3
Tak for hjælpen og link til en god blog post.
Læg lige et svar
Avatar billede neoman Novice
13. november 2007 - 10:36 #4
:P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester