Avatar billede c-sharp Nybegynder
03. april 2004 - 21:20 Der er 22 kommentarer og
2 løsninger

Problem med 2 user controls på en side

Jeg har lavet en user control som består af et tekst felt og en kalender, når man trykker på en dato i kalenderen, sættes den dato ind i tekstfeltet. Jeg har så en side hvor jeg skal have 2 af disse user controls på samme side, problemet er så at lige meget hvilken kalender jeg trykker på, så sætter den datoen ind i den samme tekstfelt.

Hvordan får jeg sat datoen fra kalenderene ind i hvert sit tekstfelt?
Avatar billede erve Nybegynder
04. april 2004 - 10:00 #1
Det skal virke, og gør det også hos mig, har prøvet flg:
public class kalenderdims : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.Calendar Calendar1;

        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
      this.Calendar1.SelectionChanged += new System.EventHandler(this.Calendar1_SelectionChanged);
      this.Load += new System.EventHandler(this.Page_Load);

    }
        #endregion

    private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
    {
      TextBox1.Text = Calendar1.SelectedDate.ToString();
    }
    }
}
Avatar billede c-sharp Nybegynder
04. april 2004 - 13:01 #2
Har du også 2 kalendere af denne type på samme side?
Avatar billede -master-d- Nybegynder
04. april 2004 - 15:02 #3
Dit problem er at de to tekstfelter har samme id, dvs. de har samme navn og dermed er det kun det første som modtager datoen, da det andet er inaktivt.
Avatar billede c-sharp Nybegynder
04. april 2004 - 16:23 #4
Når jeg kigger i kilden ser indput felterne ud som følger:

<input name="datoFra:dato" type="text" value="18-04-2004" id="datoFra_dato" class="inputText" style="width:80px;" />

<input name="datoTil:dato" type="text" id="datoTil_dato" class="inputText" style="width:80px;" />

Dvs. de har ikke samme id.
Avatar billede -master-d- Nybegynder
04. april 2004 - 16:29 #5
Okay. Har du husket at rette dit id fra datoFra_dato til datoTil_dato i din sidste kalender?
Avatar billede c-sharp Nybegynder
04. april 2004 - 18:07 #6
Hvad mener du?

Jeg har jo lavet kalenderen som en usercontrol, så jeg har indsat følgende:

<TR>
    <TD class="brod_txt" width="20">Fra:</TD>                    <TD><kalender:kal runat="server" ID="datoFra" /></TD>
    <TD class="brod_txt" width="20">Til:</TD>                    <TD><kalender:kal runat="server" ID="datoTil"/></TD>
</TR>
Avatar billede -master-d- Nybegynder
04. april 2004 - 18:14 #7
Jeg mener om du har husket at skrive navnet på det rigtige tekstfelt i koden for usercontrol 2..
Avatar billede c-sharp Nybegynder
04. april 2004 - 18:25 #8
Det er jo to usercontrols, dvs jeg bruger den samme usercontrol 2 gange på samme side, så jeg kan jo ikke ændre navnet på tekstfeltet i "usercontrol 2"
Avatar billede erve Nybegynder
05. april 2004 - 13:14 #9
Ja jeg har 2 af disse usercontrols på samme side. Men id bliver i html'en jo sammensat af usercontrolnavn + _ + id fra usercontrol'en, så der bør ikke være noget problem, og dte er der heller ikke hos mig. Jeg tror du er udsat for en eller anden bug.
Jeg lavede usercontrol'en i VS.NET og drag'ede dem over på en form, så virkede det bare.
Avatar billede c-sharp Nybegynder
05. april 2004 - 13:22 #10
Nu har jeg prøvet at "dragge" min user control over på siden i vs.net men den laver stadig samme fejl.
Avatar billede erve Nybegynder
05. april 2004 - 15:39 #11
Højst mystisk. For lige at være helt sikker har jeg nu også prøvet i VB.NET. Går fint
Her er koden med userkontrollerne, så kan du måske se om noget varierer:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="VBaspnet.WebForm1"%>
<%@ Register TagPrefix="uc1" TagName="Kalenderdims" Src="Kalenderdims.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
      <uc1:Kalenderdims id="Kalenderdims1" runat="server"></uc1:Kalenderdims>
      <uc1:Kalenderdims id="Kalenderdims2" runat="server"></uc1:Kalenderdims>
    </form>
  </body>
</HTML>
Avatar billede c-sharp Nybegynder
05. april 2004 - 17:52 #12
Her er min kode og den ligner unægtelig din:

<%@ Register TagPrefix="kalender" TagName="kal" Src="kalender.ascx" %>
<%@ Page language="c#" Codebehind="test.aspx.cs" AutoEventWireup="false" Inherits="InetModul.test" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>opretSide</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <LINK href="style.css" type="text/css" rel="stylesheet">
        <script type="text/javascript" src="script/coolselect.js"></script>
        <link rel="stylesheet" type="text/css" href="script/coolselect.css">
    </HEAD>
    <body MS_POSITIONING="GridLayout" bgColor="#cccccc" onunLoad="java script:opener.document.location='friside.aspx';">
        <table>
            <tr>
                <td>
                    <form id="Form1" method="post" runat="server">
                        <kalender:kal id="Kal1" runat="server"></kalender:kal>
                        <kalender:kal id="Kal2" runat="server"></kalender:kal>
                    </form>
                </td>
            </tr>
        </table>
    </body>
</HTML>


Må jeg evt se din kalenderdims?
Avatar billede erve Nybegynder
05. april 2004 - 18:02 #13
Ja vi må dæleme ha' det opklaret: På den her maskine har jeg kun vb.,udgaven, men det må da være det samme:
ascx:
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="Kalenderdims.ascx.vb" Inherits="VBaspnet.Kalenderdims" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<asp:Calendar id="Calendar1" runat="server"></asp:Calendar>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>

codebehind:
Public Class Kalenderdims
    Inherits System.Web.UI.UserControl

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

  End Sub
  Protected WithEvents Calendar1 As System.Web.UI.WebControls.Calendar
  Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox

    'NOTE: The following placeholder declaration is required by the Web Form Designer.
    'Do not delete or move it.
    Private designerPlaceholderDeclaration As System.Object

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub

  Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
    TextBox1.Text = Calendar1.SelectedDate.ToString()

  End Sub
End Class
Avatar billede erve Nybegynder
05. april 2004 - 18:11 #14
Hvis man laver view source i IE, ses det at der genereres et _dopostbacj-script. Kan du se om den kaldes med de forskellige usercontrols, i mit tilfælde hhv
'Kalenderdims1$Calendar1' og 'Kalenderdims2$Calendar1'?
Avatar billede c-sharp Nybegynder
06. april 2004 - 07:56 #15
Ja mit kode ligner godt nok dit meget!

Jeg har følgende når man bruger "vis kilde":

<input name="Kal1:dato" type="text" value="08-04-2004" id="Kal1_dato" class="inputText" style="width:80px;" />


<input name="Kal2:dato" type="text" id="Kal2_dato" class="inputText" style="width:80px;" />
Avatar billede c-sharp Nybegynder
06. april 2004 - 07:57 #16
java script:__doPostBack('Kal1$Calendar','V1521')

java script:__doPostBack('Kal2$Calendar','V1521')
Avatar billede erve Nybegynder
06. april 2004 - 09:06 #17
Ubegribeligt, det ser jo også rigtigt ud. Lige før jeg giver op. Sidste chance er at du poster hele din solution (zip til erik@gej.dk) , så kan jeg prøve at se hvordan det ter sig her hos mig?
Avatar billede c-sharp Nybegynder
07. april 2004 - 15:50 #18
Ja nu har jeg så fundet årsagen til fejlen, men mangler en løsning.

Min kalender ser ud som følger:

        <TD width="40"><asp:TextBox CssClass="inputText"  Width="80" id="dato" runat="server"/></TD>
        <td width="30"><a href="#" onclick="st=document.getElementById('calDiv1').style;pos=getPos(this);st.left=pos.x-120+'px';st.top=(pos.y+22)+'px';st.display=(st.display!='block')?'block':'none';"><img src="images/VaelgDato.jpg" border="0"></a>
            <div id="calDiv1" style="<%if(!calenderAkt){%>display:none;<%}%> Z-INDEX: 1; LEFT: 314px; POSITION: absolute; TOP: 114px; if: none">
                <asp:calendar id="Calendar" runat="server" OnVisibleMonthChanged="MonthChange" OnSelectionChanged="Calendar_SelectionChanged"
                    OnDayRender="Calendar_DayRender" showtitle="true" DayNameFormat="FirstTwoLetters" SelectionMode="Day"
                    BackColor="#ffffff" FirstDayOfWeek="Monday" BorderColor="#000000" ForeColor="#00000" Height="60"
                    Width="120" CssClass="brod_txt">
                    <NextPrevStyle ForeColor="White" BackColor="Navy"></NextPrevStyle>
                    <TitleStyle ForeColor="White" BackColor="Navy"></TitleStyle>
                    <OtherMonthDayStyle ForeColor="Silver"></OtherMonthDayStyle>
                </asp:calendar>
            </div>
        </td>

Jeg ligger selve kalenderen i et ny lag på siden:
<a href="#" onclick="st=document.getElementById('calDiv1').style;pos=getPos(this);st.left=pos.x-120+'px';st.top=(pos.y+22)+'px';st.display=(st.display!='block')?'block':'none';"><img src="images/VaelgDato.jpg" border="0"></a>


<div id="calDiv1" style="<%if(!calenderAkt){%>display:none;<%}%> Z-INDEX: 1; LEFT: 314px; POSITION: absolute; TOP: 114px; if: none">

problemet er bare at calDiv1 ikke får tildelt et nyt unikt navn.
Avatar billede c-sharp Nybegynder
07. april 2004 - 15:53 #19
Nogen ide til hvordan jeg løser det?

Kan man evt hente det id usercontollen får tildelt og selv klister det på navnet?
Avatar billede erve Nybegynder
07. april 2004 - 16:34 #20
Jeg er ikke stiv i javascript - forsøger at bruge codebehind-princippet så meget som muligt. Jeg er ikke helt med på hvorfor du gør det på den måde.
Jeg anvender Kalenderkontrollens SelectionChanged-event til at sætte textbox'ens indhold, og lader ASP.NET-engine'n om at generere scripts mv. Så virker det med id-tildeling osv.
Beklager
Avatar billede c-sharp Nybegynder
08. april 2004 - 00:36 #21
Jeg gør det samme som dig, den eneste forskel er at jeg bruger noget css til visningen af kalenderen. Dvs. når man trykker på en knap vil min kalender blive vist neden under det tekst felt som den valgte dato insættes i, så den virker liges som i outlook's kalender.
Avatar billede c-sharp Nybegynder
08. april 2004 - 08:53 #22
Jeg lukker her igen.
erve>> du skal have tusind tak for din tid!!
Avatar billede erve Nybegynder
08. april 2004 - 10:23 #23
Ja, vi kommer jo nok vist desværre ikke videre
Avatar billede burningice Nybegynder
10. april 2004 - 19:29 #24
du kan bruge ClientID i på serveren til at få fat i det id som der vil blive renderet til klienten
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