Avatar billede kryderbolle Nybegynder
30. marts 2010 - 10:36 Der er 6 kommentarer og
1 løsning

Tilgå elementer i usercontrol

Jeg har lavet en usercontrol til at styr mit layout så det nemt kan ændres, men har nu problemer med at tilgå mine elementer i code behind.

Min usercontrol
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="dataTable1.ascx.cs" Inherits="usercontrols_dataTable1" %>

<div class="dataTable1">
<div class="dataTable1Head">
<div class="dataTable1Title"><asp:PlaceHolder ID="Title" runat="server"></asp:PlaceHolder></div></div>
<asp:PlaceHolder ID="Data" runat="server"></asp:PlaceHolder>
<div class="dataTable1Fotter">&nbsp;</div>
</div>

Min kode:
<uc3:dataTable1 ID="dataTable11" runat="server" >
<TitleTemplate>Title test</TitleTemplate>
<DataTemplate>
<asp:TextBox ID="TextNavn" runat="server" Width="400"></asp:TextBox>
</DataTemplate>
</uc3:dataTable1>

Codebehind:
TextNavn.Text = "hej";

Hvordan tilgår jeg TextNavn elementet i codeBehind? IntelliSense kan godt finde den, men jeg får fejlen "Navnet 'TextNavn' findes ikke i den aktuelle sammenhæng" når jeg køre koden.
Avatar billede janus_007 Nybegynder
30. marts 2010 - 11:20 #1
Jeg synes ikke lige at kunne se hvor du loader din UserControl?
Avatar billede kryderbolle Nybegynder
30. marts 2010 - 11:28 #2
Synes ikke der var nogen grund til at smide hele koden ind. Men jo jeg loader den. Og fjerner jeg codebehind linjen (så siden kan køre), bliver det også vist som det skal.

Jeg har bare brug for at kunne sætte værdien i tekstboksen i codebehind.
Avatar billede janus_007 Nybegynder
30. marts 2010 - 12:41 #3
Hvor loader du controllen da?

Umiddelbart så tyder det jo på at du forsøger at sætte TextNavn.Text = "hej"; førend du har loadet controllen.
Avatar billede kryderbolle Nybegynder
30. marts 2010 - 12:57 #4
Går da ud fra controleren loader sig selv, men jeg er ny i .NET, så jeg kan tage fejl. Her har du hele koden:

usercontrol filen:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="dataTable1.ascx.cs" Inherits="usercontrols_dataTable1" %>

<div class="dataTable1">
<div class="dataTable1Head">
<div class="dataTable1Title"><asp:PlaceHolder ID="Title" runat="server"></asp:PlaceHolder></div></div>
<asp:PlaceHolder ID="Data" runat="server"></asp:PlaceHolder>
<div class="dataTable1Fotter">&nbsp;</div>
</div>


aspx filen (har en masterpage):
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="BuildNew.aspx.cs" Inherits="Admin_BuildNew" %>

<%@ Register src="../usercontrols/dataTable1.ascx" tagname="dataTable1" tagprefix="uc3" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<uc3:dataTable1 ID="dataTable11" runat="server" >
<TitleTemplate>Title test</TitleTemplate>
<DataTemplate>
<asp:TextBox ID="TextNavn" runat="server" Width="400"></asp:TextBox>
</DataTemplate>
</uc3:dataTable1>

    </DataTemplate>
    </uc3:dataTable1>
</asp:Content>

aspx.cs
public partial class Admin_BuildNew : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TextNavn.Text = "hej";
    }
}
Avatar billede janus_007 Nybegynder
31. marts 2010 - 00:58 #5
Hmm jeg tror nu altså ikke man kan skrive til en control som ligger der.

Men du kan gøre sådan her:

Main.aspx

<form id="form1" runat="server">
    <div>
        Main<br />
        <br />
        UC comes here... :
        <br />
        <uc1:WebUserControl1 ID="WebUserControl11" runat="server">
            <TitleTemplate>
                <h1>
                    Some Templated Foos....</h1>
                <hr>
                <asp:TextBox ID="TextNavn" runat="server" Width="400"></asp:TextBox>
                <asp:Label ID="_writetoUC" runat="server"></asp:Label>
            </TitleTemplate>
        </uc1:WebUserControl1>
        <asp:Label ID="labtest" runat="server"></asp:Label>
    </div>
    </form>

og i din UC har du placeholder til Title som du selv har lavet.

Men derudover i din code behind til din UC:

[ParseChildren(true)]
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(TemplateControl))]
        public ITemplate TitleTemplate{get; set;}

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            if (this.TitleTemplate != null)
            {
                this.TitleTemplate.InstantiateIn(Title);
            }
        }

    }


Jeg ved ikke om det hjalp dig lidt på vej :)
Avatar billede kryderbolle Nybegynder
31. marts 2010 - 09:37 #6
Det havde jeg faktisk allerede.

Jeg har brugt denne tut:
http://www.eggheadcafe.com/tutorials/aspnet/92a47792-a768-4379-8997-2b1f513d86bc/aspnet-templated-usercon.aspx

Og jeg skulle bare læse en af de første linjer. Der stod det hvordan man tilgår elementern:

TextBox t = (TextBox)this.userControl1.FindControl("TextBox1");
t.Text = "Skriv navn";

Simpelt når man ved det, men det har så taget mig over en dag at finde ud af, fordi jeg havde overset en linje :(

Smid et svar for din hjælp.
Avatar billede janus_007 Nybegynder
01. april 2010 - 12:32 #7
Det er jo ikke så meget jeg har hjulpet :)
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