Avatar billede lajer Nybegynder
05. august 2006 - 17:52 Der er 10 kommentarer og
1 løsning

Fange InnerHTML i UserControl

Hej

Jeg har en UserControl. Hvori, jeg gerne vil tilføje noget HTML.

Mit spørgsmål går på, hvordan for jeg lavet denne usercontrol, så jeg kan tage det HTML man skriver imellem controllen's start og slut tag?

Eksempel:
<MinControl:TestControl runat="server" ID="Test">Dette tekst vil jeg gerne kunne håndtere i min control.</MinControl:TestControl>

På forhånd tak
Avatar billede snepnet Nybegynder
06. august 2006 - 01:07 #1
Jeg kan ikke helt se idéen... Er du sikker på at du ikke er interesseret i at gøre den templated?
(Du kan jo lige give et vink om hvad det er du vil)

Men well... Du kan få compileren til at æde det (ikke designeren) hvis du sætter en
[ParseChildren()] over UserControl klassen.

Du kan så i din UserControl's page_load få teksten ud sådan her:

LiteralControl innerContent = Controls[Controls.Count-1] as LiteralControl;
string innerHtml = innerContent.Text;

// og self. gøre noget ved den
innerContent.Text = String.Format("<br />***{0}***", innerHtml);

Mvh
(Bruger du 1.1. eller 2.0)
Avatar billede lajer Nybegynder
06. august 2006 - 01:37 #2
Hej Snepset.

Tak for dit svar.

Det jeg vil, er at lave et slags custom fieldset, med en UserControl.

Min usercontrol ser sådan her ud:
<div class="PaneFieldTopContainer">
    <div class="PaneFieldTopInner" id="divHeadline" runat="server">&nbsp;</div>
</div>
<div class="PaneFieldContentContainer">
    <div class="PaneFieldContentInner" id="divContent" runat="server">
   
        <!-- ALT INDHOLD SKAL INDSÆTTES HER -->
   
    </div>
</div>
<div class="PaneFieldBottom">&nbsp;</div>

Min tanke var, at jeg ville fange alt HTML i min instance af denne usercontrol, or ligge ind der hvor min kommentar er. Som vist i første eksempel.

Jeg har forsøgt din metode - og det virker glimrende, så længe jeg kun skriver HTML. Hvis jeg begynder at ligge f.eks. et TreeView ind, så tager den ikke dette med. Er det bare mig der overser noget her?

Det er iøvrigt 2.0 - og jeg bruger aldrig designeren, så skidt pyt med om den ikke kan finde ud af det :)
Avatar billede snepnet Nybegynder
06. august 2006 - 02:30 #3
Nej det er ikke dig der overser noget - det er hvad den kan :o)
(havde forstået det sådan at du bare gerne ville tilføje noget html).
Umiddelbart synes jeg det ser ud som om du skal lave en templated usercontrol... Så kan du sætte den op f.eks. sådan her:

<ns:CustomFieldSet ...>
<HeaderTemplate>
  <asp:Label ... hvad der nu skal være
</HeaderTemplate>
<FieldContainerTemplate>
  <asp:TextBox ... hvad der nu skal være
</FieldContainerTemplate>
</ns:CustomFieldSet>

Mvh
Avatar billede snepnet Nybegynder
06. august 2006 - 02:31 #4
På samme måde som du gør med repeatere, gridview etc..
Mvh
Avatar billede lajer Nybegynder
06. august 2006 - 04:06 #5
Det har jeg gjort nu. Men så opstår der et nyt problem. For nu kan jeg ikke fange min asp controls fra CodeBehind.

Jeg har et treeview, som jeg vil tilføje nodes til fra CodeBehind.

aspx siden ser sådan her ud:
<WM:PaneField runat="server" Headline="Tester">
    <Content>
        <asp:TreeView
            runat="server"
            ID="Navigation"
            Height="400"
            Width="200"
            ShowLines="true"
            ShowExpandCollapse="true"
            style="overflow:auto;"
        />
    </Content>
</WM:PaneField>

Her forsøger jeg at tilføje nodes til Navigation fra CodeBehind. Men det kan ikke lade sig gøre længere?
Avatar billede lajer Nybegynder
06. august 2006 - 04:09 #6
Jeg for følgende exception når jeg forsøger at compile:

The name 'Navigation' does not exist in the current context

Min Codebehind ser således ud:

protected void Page_Load(object sender, EventArgs e)
{
    // Load tree view
    TreeNode nodeFiles = new TreeNode();
    nodeFiles.Text = "Filer";
    nodeFiles.NavigateUrl = "java script:alert(0);";
    nodeFiles.ImageUrl = PATHHTTPImageIcons + "FileStructure.gif";
    for (int x = 0; x < 10; x++)
    {
        TreeNode file = new TreeNode();
        file.Text = "Child " + x.ToString();

        nodeFiles.ChildNodes.Add(file);
    }

    Navigation.Nodes.Add(nodeFiles);

}
Avatar billede snepnet Nybegynder
06. august 2006 - 10:52 #7
Det vil vel også være mere naturligt at du påtrykker det udefra - når det er i templaten kontrollen er angivet.
Hvis du laver din kontrol templatebaseret, kan du jo ikke forudsætte at specifikke kontroller er tilstede - og derfor heller ikke rigtig programmere op imod dem.
Du kan fra din side godt får fat i det treeview du har lagt i din template - på helt almindelig vis med FindControl(...) på containeren - altså din kontrol.
Mvh
Avatar billede lajer Nybegynder
06. august 2006 - 13:42 #8
Det forstår jeg ikke. Hvorfor har min aspx kontrol inde i min usercontrol, noget med min usercontrol at gøre?


Kan jeg ikke få min usercontrol til at opfører sig som et Panel f.eks. - og så bare tage alt det HTML der bliver renderet i dens innerHTML og flytte til en ContentContainer?

Jeg har iøvrigt forsøgt at bruge FindControl() på min UserControl, for at få fat i mit TreeView den vej, men her for jeg bare null.

Kode:
TreeView Navigation = (TreeView)WebManager.FindControl("Navigation");


FYI, så har jeg kastet lidt god karma efter dig :)
Avatar billede snepnet Nybegynder
06. august 2006 - 14:32 #9
Tak for karma :o)

Men jeg tror måske jeg ikke er helt med nu....
Har du mulighed for at lægge dit projekt til download, så jeg kan kigge på det her - eller har du måske en messengerkonto vi kan skrive over?

Mvh
Avatar billede lajer Nybegynder
06. august 2006 - 14:41 #10
Ja, det har jeg da. Du kan fange mig på torben@subcubes.dk på MSN :)

Tak for indsatsen. Det er stor stil.
Avatar billede snepnet Nybegynder
06. august 2006 - 15:39 #11
Har fået koden og kigget på den.
InstantiateIn på templaten er flytte til CreateChildControls, og der er redigeret lidt i FindControl koden på selve siden.
Mvh
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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