Avatar billede flashit Nybegynder
22. august 2007 - 10:31 Der er 15 kommentarer og
1 løsning

Ajax ModalPopupExtender driller

Hej E

Jeg har et lille test projekt.

Dette indeholder en aspx side som benytter en repeater til at vise indholdet af en datatabel.

Når man klikker på et link i repeateren så sætter  dette link en property i en web user control. Virker perfekt.

Men jeg vil gerne benytte ModalPopupExtender til at vise min Web User Control. Problemet er så at værdien ikke bliver overført til min Web User Control, når jeg benytter ModalPopupExtender.

Der kommer ikke nogle fejl, der sker bare ikke noget.

Kan i hjælpe med det?

Her er min test kode.

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>

</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"/>
       
        <asp:UpdatePanel runat="server" ID="sdfsdf">
        <ContentTemplate>
        <div>   
       
            <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
            <asp:LinkButton runat="server" Text='<%#Eval("MyColumn") %>' CommandArgument='<%#Eval("ID") %>' ID="hlbLink"></asp:LinkButton>
            <p></p>
         
     
            </ItemTemplate>
           
            </asp:Repeater>
       
         
            <asp:Panel ID="Panel1" runat="server"  Width="225px" BackColor="white" >
                <uc1:test ID="Test1" runat="server" SetValue='<%#Eval("ID") %>' />
            </asp:Panel>
         
        </div>
       
        </ContentTemplate>
        </asp:UpdatePanel>
       
    </form>
</body>
</html>
Imports System.Data

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim dtOne As New DataTable("FirstTable")
        dtOne.Columns.Add("ID")
        dtOne.Columns.Add("MyColumn")

        For i As Integer = 1 To 10

            Dim row As DataRow = dtOne.NewRow()

            row("ID") = i.ToString
            row("MyColumn") = "Data" + i.ToString
            dtOne.Rows.Add(row)
        Next
     

        Dim ds As New DataSet()

        ds.Tables.Add(dtOne)

        Repeater1.DataSource = ds
        Repeater1.DataBind()


    End Sub

    Protected Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand
        Test1.SetValue = e.CommandArgument.ToString()
    End Sub
End Class


WebUserControl’en
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="test.ascx.vb" Inherits="test" %>
<asp:Label ID="lblTextTest" runat="server"></asp:Label><br />
<br />
<asp:Button ID="Button1" runat="server" Text="luk" /><br />

Partial Class test
    Inherits System.Web.UI.UserControl

    Dim _myValue As String


    Public Property SetValue()
        Get
            Return _myValue
        End Get
        Set(ByVal value)
            _myValue = value
            lblTextTest.Text = _myValue
        End Set
    End Property




 
End Class

Så koden virker ikke hvis jeg i stedet gør således.
<asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
            <asp:LinkButton runat="server" Text='<%#Eval("MyColumn") %>' CommandArgument='<%#Eval("ID") %>' ID="hlbLink"></asp:LinkButton>
            <p></p>
                <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="hlbLink" PopupControlID="Panel1">
                </cc1:ModalPopupExtender>
                 
            </ItemTemplate>
           
            </asp:Repeater>

Håber det giver mening..
Avatar billede neoman Novice
22. august 2007 - 10:46 #1
Et skud fra hoften : din extender ligger inde i ItemTemplate, det gør panel1 ikke.

Hvad ville der ske, hvis du satte din extender ved din panel (begge udenfor itemtemplaten), og i din ItemCommand handler satte extenderens TargetControID til id for  din button, som du kan fiske ud af sender (så vidt jeg husker) ??
Avatar billede flashit Nybegynder
22. august 2007 - 12:52 #2
Hej neoman

Det hjælper lidt, måske.. :-)

Jeg har flyttet rundt på popupextenderen, og har tilføjet lidt i Item_Command.

Protected Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand
        Test1.SetValue = e.CommandArgument.ToString()
        Dim myTempButtom As LinkButton = DirectCast(e.CommandSource, LinkButton)

        ModalPopupExtender1.TargetControlID = myTempButtom.UniqueID
    End Sub

myTempButtom.UniqueID retunere så det samme som der står i min html, men den siger stadig at den ikke kan finde min targetControl??

Nogle ideer?

Og tak for hjælpen.
Avatar billede neoman Novice
22. august 2007 - 13:28 #3
har du prøvet

        ModalPopupExtender1.TargetControlID = myTempButtom.ID
Avatar billede flashit Nybegynder
22. august 2007 - 22:47 #4
Det virker ikke. Den kan ikke finde en kontrol med det navn. Har ikke koden, da den er op arbejdet, men den returner ikke det samme som der står i HTML'en. Det gør myTempButtom.UniqueID, mne det virker heller ikke... :-(

Andre ideer?
Avatar billede neoman Novice
22. august 2007 - 23:16 #5
jep... behold i første omgang
        ModalPopupExtender1.TargetControlID = myTempButtom.ID

og fjern din UpdatePanel (abre midlertidigt, for at få det til at køre.


Hvis det virker nu, så kan du smække updatepanel på igen, og  så skal du bruge sdfsdf.FindControl for at få fat i din popupextender. Jeg har dog mine tvivl at det virker.

Men, egentligt ligger problemet nok i at din extender ligger inde i repeateren.. Så igen, i første omgang fjern din update panel. Og inde i repeateren burde du kunne finde din modalpopupextender (nu gætter jeg at denne kontrol er som alle andre normale kontroller):

Dim myExtender as ModalPopupExtender = CType(Repeater1.FindControl("ModalPopupExtender1"), ModalPopupExtender)
og så
myExtender.TargetControlID = myTempButtom.ID
Avatar billede neoman Novice
22. august 2007 - 23:23 #6
Hvis alt dette heller ikke virker, så prøver jeg lave lidt kode en gang i morgen - kan ikke bakse med det nu desværre .-( Måske kommer der en anden forbi med en løsning inden da:-)
Avatar billede flashit Nybegynder
23. august 2007 - 09:48 #7
Hej Igen

Samme fejl.

The TargetControlID of 'ModalPopupExtender1' is not valid. A control with ID 'Repeater1_ctl07_hlbLink' could not be found.

Når jeg bruger myTempButtom.ClientID, selv om html koden ser ud som her.
<a id="Repeater1_ctl07_hlbLink" href="java script:__doPostBack('Repeater1$ctl07$hlbLink','')">Data8</a>

Jeg har slettet UpdatePannel, men det hjalp ikke.. Fedt du gider hjælpe
Avatar billede neoman Novice
23. august 2007 - 15:56 #8
jeg har lige flikket noget sammen - det ka ndu måske bruge som udgangspunkt. Har desværre ikk tid til mere i dag :-( Du kan lave en ny side med min kode og prøve at tage den derfra:

....aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="TestPop.aspx.vb" Inherits="TestPop" %>

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI" TagPrefix="asp" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<!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 runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <asp:Label ID="myLabel" runat="server"><%# container.DataItem %></asp:Label>
                    <asp:Button ID="myButton" runat="server" OnClick="Button1_Click" />
                </ItemTemplate>
            </asp:Repeater>
        </div>
        <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" PopupControlID="Panel1"
            TargetControlID="Button1">
        </cc1:ModalPopupExtender>
        <asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px" BackColor="Aquamarine">
            <asp:Label ID="someOtherLabel" runat="server">lalala  </asp:Label>
            <asp:Button ID="Button2" runat="server" Text="Button" />
        </asp:Panel>
        <asp:Button ID="Button1" runat="server" Text="Button" Style="display: none;" />
    </form>
</body>
</html>

------VB

Partial Class TestPop
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Dim myValue As New StringCollection
            myValue.Add("1")
            myValue.Add("2")
            myValue.Add("3")
            myValue.Add("4")
            Repeater1.DataSource = myValue
            Repeater1.DataBind()
        End If

    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim myButton As Button = sender
        MsgBox("hello2")
        ModalPopupExtender1.TargetControlID = myButton.UniqueID
    End Sub
End Class

den virker da til dels i hvertfald :)

Jeg snyder lidt, idet jeg som udgangspunkt sætter TargetControlID til en knap som er usynlig og ikke bruges til noget (udover at fodre bæstet med det den vil ha'). TargetControlID bliver sat i eventhandleren.
Avatar billede flashit Nybegynder
23. august 2007 - 19:16 #9
til dels. Betyder det at det kun virker hver anden tryk?
Det gør det nemlig hos mig. :-)
Avatar billede neoman Novice
23. august 2007 - 20:14 #10
Jaja - før virkede det slet ikke, og nu har du fået halvdelen - stadig utilfreds ? :-) Hehe, jeg har sku dummet mig - naturligvis virker det kun hver anden gang.

Dette her virker hver gang:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Copy of TestPop.aspx.vb" Inherits="CopyTestPop" %>

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    Namespace="System.Web.UI" TagPrefix="asp" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<!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 runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <asp:Label ID="myLabel" runat="server"><%# container.DataItem %></asp:Label>
                    <asp:Button ID="myButton" runat="server" OnClick="Button1_Click" />
                            <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" PopupControlID="Panel1" TargetControlID="myButton">
        </cc1:ModalPopupExtender>
                </ItemTemplate>
            </asp:Repeater>
        </div>

        <asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px" BackColor="Aquamarine">
            <asp:Label ID="someOtherLabel" runat="server">lalala  </asp:Label>
            <asp:Button ID="Button2" runat="server" Text="Button" />
        </asp:Panel>
        <asp:Button ID="Button1" runat="server" Text="Button" Style="display: none;" />
    </form>
</body>
</html>

og vb


Partial Class CopyTestPop
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Dim myValue As New StringCollection
            myValue.Add("1")
            myValue.Add("2")
            myValue.Add("3")
            myValue.Add("4")
            Repeater1.DataSource = myValue
            Repeater1.DataBind()
        End If

    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim myButton As Button = sender
        MsgBox("hello2")
        '    ModalPopupExtender1.TargetControlID = myButton.UniqueID
    End Sub
End Class
Avatar billede flashit Nybegynder
23. august 2007 - 23:57 #11
Har du så en ide til hvordan man kan sætte someOtherLabel.Text = den knap som man har klikket på. Det er hele ideen med min popup.

:-)
Avatar billede neoman Novice
24. august 2007 - 13:45 #12
Hva er problemet ? Nu er det bare lige ud ad landevejen :

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim myButton As Button = sender
        Dim myLabel2 AS Label = CType(Panel1.FindControl("someOtherLabel"), Label)
      ' MsgBox("hello2")
        myLabel2.text = myButton.UniqueID eller myButton.ID eller whatever
    End Sub
Avatar billede flashit Nybegynder
24. august 2007 - 15:49 #13
Ja, det troede jeg også, men den kalder aldrig Button1_Click eventet, så jeg kan ikke sætte værdien på den måde. Kan du da det?
Avatar billede flashit Nybegynder
25. august 2007 - 14:19 #14
Hej neoman

Mange tak for hjælpen, havde ikke kunne finde ud af det uden din hjælp. Lægger du ikke et svar så du kan få dine points. Mange tak.....


Her er mit resultat(igen bare en lille test)

HTML
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<%@ Register Src="test.ascx" TagName="test" TagPrefix="uc1" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
    <style>
        .modalBackground {
            background-color:Gray;
            filter:alpha(opacity=70);
            opacity:0.7;
        }
    </style>


</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"/>
       
       
        <div>   
       
            <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
            <asp:LinkButton runat="server" Text='<%#Eval("MyColumn") %>' CommandArgument='<%#Eval("ID") %>' ID="hlbLink"></asp:LinkButton>
            <p></p>
            </ItemTemplate>
           
            </asp:Repeater>
        <asp:Button id="testknap" runat="server" Visible="true" Width="0"/>
         
         
        </div>
        <cc1:ModalPopupExtender
                ID="ModalPopupExtender1"
                runat="server"
                TargetControlID="testknap"
                PopupControlID="Panel1"
                DropShadow="false"
                BackgroundCssClass="modalBackground">
                </cc1:ModalPopupExtender>
       
       
            <asp:Panel ID="Panel1" runat="server"  Width="225px" BackColor="white" style="display:none">
                <uc1:test ID="Test1" runat="server" SetValue='<%#Eval("ID") %>' />
            </asp:Panel>
       
    </form>
</body>
</html>


VB

Imports System.Data


Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then


            Dim dtOne As New DataTable("FirstTable")
            dtOne.Columns.Add("ID")
            dtOne.Columns.Add("MyColumn")

            For i As Integer = 1 To 10

                Dim row As DataRow = dtOne.NewRow()

                row("ID") = i.ToString
                row("MyColumn") = "Data" + i.ToString
                dtOne.Rows.Add(row)
            Next


            Dim ds As New DataSet()

            ds.Tables.Add(dtOne)

            Repeater1.DataSource = ds
            Repeater1.DataBind()
        End If

    End Sub

    Protected Sub Repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles Repeater1.ItemCommand
        Dim myTempButtom As LinkButton = DirectCast(e.CommandSource, LinkButton)
        Test1.SetValue = myTempButtom.CommandArgument.ToString()
        ModalPopupExtender1.Show()

    End Sub



 
End Class

UserControl

HTML
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="test.ascx.vb" Inherits="test" %>
<asp:Label ID="lblTextTest" runat="server"></asp:Label><br />
<br />
<asp:Button ID="Button1" runat="server" Text="luk" /><br />

VB


Partial Class test
    Inherits System.Web.UI.UserControl

    Dim _myValue As String


    Public Property SetValue()
        Get
            Return _myValue
        End Get
        Set(ByVal value)
            _myValue = value
            lblTextTest.Text = "Du har klikket på knappen data" + _myValue
        End Set
    End Property

End Class


bare hvis der skulle være andre som kan bruge det til noget...

igen TAK neoman :-)
Avatar billede neoman Novice
25. august 2007 - 18:43 #15
godt det lykkedes ... jeg kunne ikke bakse med det mere pga nogle commitments, men du har jo klaret mosten på egen hånd:)
Avatar billede flashit Nybegynder
25. august 2007 - 19:20 #16
:-)
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