Du låter child kontrollen göra postbacken. I den kontrollen har du ett event som moder kontrollen lyssnar på... Moder kontrollen låter som värsta rymbinvasionen... Det är klart att den skall avfyras där... Editerar koden nu... Du kör som jag skrev postback hanteringen för knappen i popup.ascx. Den kontrollen exponerar ett event som din moder kontroll lyssnar på. Du behöver alltså hooka upp det. Du kommer behöva ladda in den alltid för att eventet skall raisas. Men du får väl dölja den annars. Den bör dessutom laddas in tidigt. Alternativt håller du koll på om den var inlagd innan postbacken eller inte och laddar in den i sånna fall. Den måste skapas för att visas, men också skapas för att postbacken ska trigga eventet. Vad skulle min namespace och min kontroll klass heta? Var hittar jag den? Något jag måste skapa upp? I och med att du inte använder namespace så räcker det med namnet på din klass, dvs "popup" Testat med nedan ... men VS säger att Type 'popup' is not defined ..... ?? Jag kan inte VB men i C# skriver man i alla fall inte Nu har jag översatt till C#. Vad är fel? Är barn i det här fallet din pop-up kontroll? Dvs är eventet deklarerat i classen ASP.popup_ascx? Nu tror jag har fått det att fungera ... Skapa en klass som äver från EventArgs och som har en property för detta värde. Därefter byter du event typen till EventHandler<MyEventArgs> och gör om OnButtonClicked till att skapa upp en instans av den typen, sätter propertyn och sen använder den instansen när du raisar eventet... Det blir något att bita i... kan inte se detta framför mig ännu. Du behöver ändra moderkontrollens eventhandler till att ta emot det nya eventarget enligt följande: I min värld ser det bra ut. Kan itne svara på varför den påstår att din handlers signatur inte stämmer överens med eventets. Har du den kod som du skrev ut här i ditt projekt så ska det funka. Det ser bra ut... Inga andra varningar när du bygger? Inga andra fel? Din nya MyEventArgs klass gnäller inte? Jag betvilar dig inte! Felet måste ligga i converterarens översättning ... Skulle rekommendera att ha en bok som heter Professional ASP.NET 2.0 från Wrox till hands. Den går bra både att läsa från pärm till pärm som jag gör som att ha som uppslagsverk. Den kostar peanuts på adlibris...trigga en postback
Jag har en ascx-sida där jag även laddar in en annan ascx-sida via en placeholder. När jag utför en knapptryckning på den andra ascx-sidan så vill jag att en dropdown i moder ascx:en skall laddas om.
Kan jag bara från den andra ascx:en triggen postback för moder ascx:en så vore saken biff. Någon som vet?Sv:trigga en postback
events? exempel.
(får inga svar på sökningar överhuvudtaget. måste vara fel på pelles sökmotor) Sv: trigga en postback
Child kontroll
<code>
protected void Button_Click(object sender, EventArgs e)
{
OnButtonClicked();
}
protected void OnButtonClicked()
{
if (ButtonClicked != null)
ButtonClicked(this,new EventArgs());
}
public event EventHandler ButtonClicked;
</code>
Moder kontroll
<code>
protected void Page_Load(object sender, EventArgs e)
{
myChildControl.ButtonClicked += myChildControl_ButtonClicked;
}
protected void myChildControl_ButtonClicked(object sender, EventArgs e)
{
myDropDownList.SelectedItem=1;
}
</code>
Men du kommer troligen få ärva EventArgs och skapa ett eget sådant och bifoga informationen om vad som skall väljas i drop downen om det är baserat på knappen...
EDIT: Uppdaterade koden...hade missat kalla på OnButtonClicked i handlernSv:trigga en postback
Fråga 1 : sub:en "OnButtonClicked" skall den inte avfyras i "Button_Click"
Fråga 2 : vad är myChildControl?
Barn
<code>
Protected Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
?? OnButtonClicked ??
End Sub
Protected Sub OnButtonClicked()
RaiseEvent ButtonClicked(Me, New EventArgs())
End Sub
Public Event ButtonClicked As EventHandler
</code>
Moder
<code>
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
myChildControl.ButtonClicked += myChildControl_ButtonClicked
End Sub
Protected Sub myChildControl_ButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
myDropDownList.SelectedItem = 1
End Sub
</code>Sv: trigga en postback
myChildControl är den kontroll som exponerar eventet... dvs den kontroll som innehåller knappen.Sv:trigga en postback
Jag laddar barnet via en placeholder
<code>
PlaceHolder1.Controls.Add(CType(LoadControl("popup.ascx"), Control))
</code>
Alltså finns min knapp där? Om det är den knappen .. hur får man tag på den ?Sv: trigga en postback
<code>
myNamspace.myUserControl uc = (myNamspace.myUserControl)LoadControl("popup.ascx");
uc.ButtonClicked += uc_ButtonClicked;
PlaceHolder1.Controls.Add(uc);
</code>Sv:trigga en postback
Om vi gör om detta vb.net som jag pratar säger en konverterare att det skall se ut så här :
<code>
Dim uc As myNamspace.myUserControl = DirectCast(LoadControl("popup.ascx"), myNamspace.myUserControl)
uc.ButtonClicked += uc_ButtonClicked
PlaceHolder1.Controls.Add(uc)
</code>
Då är frågan "myNamspace.myUserControl" ?
Det ger mig ett felmeddelande : "TYPE 'myNamspace.myUserControl' is not defined"
Sedan vill jag nämna att popup.ascx inte alltid laddas. Den laddas vid ett knapp-tryck på modersidan.
Funkar det att jag laddar som ovan i ett knapp event på modersidan och jag fortfarande kan lyssna av barn knapp eventet? Sv: trigga en postback
myNamspace.myUserControl var meningen att du skulle byta ut till DITT namespace och DIN kontroll klass. Det var pseudo kod...Sv:trigga en postback
(har inte rotat i dessa trakter förut)
popup.ascx
<code>
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="popup.ascx.vb" Inherits="popup" %>
...osv
</code>
popup.ascx.vb
<code>
Partial Class popup
Inherits System.Web.UI.UserControl
Public Event ButtonClicked As EventHandler
Protected Sub btHla_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btHla.Click
RaiseEvent ButtonClicked(Me, New EventArgs())
End Sub
End Class
</code>
Jag har inte greppat för mig gällande namespace och kontoll?!Sv: trigga en postback
Sv:trigga en postback
sedan påstår VS att : Argument not specified for parameter 'e' of 'Protected Sub uc_ButtonClicked(sender As Object, e As System.EventArgs) ... ??
<code>
........
Dim uc As popup = DirectCast(LoadControl("popup.ascx"), popup)
uc.ButtonClicked += uc_ButtonClicked
PlaceHolder1.Controls.Add(uc)
end sub
Protected Sub uc_ButtonClicked(ByVal sender As Object, ByVal e As EventArgs)
.........
End Sub
</code>Vad beror det på
Jag tänkte så här ... vad beror det på att min klass popup inte vill hittas ...
därför skrev jag dim uc as ... och då dyker det upp en meny. I den menyn finns inte popup. Alltså hur gör man ?Sv: Vad beror det på
<code>
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="moder.ascx.vb" Inherits="moder" %>
<%@ Reference Control="popup.ascx" %>
</code>
När jag lagt till ovan i min moder.ascx funkar :
<code>
Dim uc As popup = DirectCast(LoadControl("popup.ascx"), popup)
</code>
men då funkar inte :
<code>
uc.ButtonClicked += uc_ButtonClicked()
</code>
??? Sv:Vad beror det på
<code>
uc.ButtonClicked += uc_ButtonClicked()
</code>
Det innebär att metoden uc_ButtonClicked skulle returnera en delegate...
testa
<code>
uc.ButtonClicked += uc_ButtonClicked
</code>
eller fråga någon som är bättre på VB om delegater i VB...Sv: Vad beror det på
Ok det är nog detta som är det som ger felmeddelandet.
uc.ButtonClicked finns ingen ButtonClicked under uc Sv:Vad beror det på
Moder (moder.ascx)
<code>
protected void Page_Load(object sender, EventArgs e)
{
ASP.popup_ascx uc = (ASP.popup_ascx)LoadControl("popup.ascx");
uc.ButtonClicked += uc_ButtonClicked; 'Här säger VS att det är fel.
PlaceHolder1.Controls.Add(uc);
}
protected void uc_ButtonClicked(object sender, EventArgs e)
{
myDropDownList.SelectedItem = 1;
}
</code>
Barn (popup.ascx)
<code>
protected void Button_Click(object sender, EventArgs e)
{
OnButtonClicked();
}
protected void OnButtonClicked()
{
if (ButtonClicked != null)
ButtonClicked(this,new EventArgs());
}
public event EventHandler ButtonClicked;</code>
När jag provkör min kod genom att ignorera felmeddelanden från VS får jag felmeddelande :
"Public Event ButtonClicked(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event."Sv: Vad beror det på
Sv: Vad beror det på
En ref till popup.ascx måste bifogas mother.ascx
<code>
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="mother.ascx.vb" Inherits="mother" %>
<%@ Reference Control="popup.ascx" %>
</code>
Det som laddar popup.ascx och kollar läget måste se ut så här i vb
<code>
Dim uc As sys_popup = DirectCast(LoadControl("popup.ascx"), sys_popup)
AddHandler uc.ButtonClicked, AddressOf Me.uc_ButtonClicked
PlaceHolder1.Controls.Add(uc)
</code>
Frågan är nu bara hur får jag med ett värde i en textbox i popup.ascx till mother.ascx ?Sv:Vad beror det på
Sv: Vad beror det på
Föresten Tack för hjälpen!Sv:Vad beror det på
protected void Page_Load(object sender, EventArgs e)
{
ASP.popup_ascx uc = (ASP.popup_ascx)LoadControl("popup.ascx");
uc.ButtonClicked += uc_ButtonClicked; 'Här säger VS att det är fel.
PlaceHolder1.Controls.Add(uc);
}
protected void uc_ButtonClicked(object sender, MyEventArgs e)
{
myDropDownList.SelectedItem = e.Index;
}
Du behöver ändra barnkontrollen för att använda den nya delegate typen med ny eventargs typ
protected void Button_Click(object sender, EventArgs e)
{
OnButtonClicked();
}
protected void OnButtonClicked()
{
if (ButtonClicked != null)
{
int index = 1; //något värde som behöver flyttas till moderkontrollen"
ButtonClicked(this,new MyEventArgs(index));
}
}
public event EventHandler<MyEventArgs> ButtonClicked;
Och sen behöver du ett eget eventargs för att transportera informationen i eventet... dvs MyEventArgs
public class MyEventArgs : EventArgs
{
public readonly int Index;
public MyEventArgs(int index)
{
Index = index;
}
}
Sv:Vad beror det på
Me.uc_ButtonClicked = Felmeddelande :
'Protected Sub uc_ButtonClicked(sender As Object, e As System.EventArgs)' does not have the same signature as delegate 'Delegate Sub EventHandler(Of TEventArgs As System.EventArgs)(sender As Object, e As MyEventArgs)'.
MODER
<code>
'C#=================================================================
protected void Page_Load(object sender, EventArgs e)
{
sys_popup uc = (sys_popup)LoadControl("sys_popup.ascx");
uc.ButtonClicked += this.uc_ButtonClicked;
PlaceHolder1.Controls.Add(uc);
}
protected void uc_ButtonClicked(object sender, MyEventArgs e)
{
myDropDownList.SelectedItem = e.Index;
}
'VB=================================================================
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim uc As ASP.popup_ascx = DirectCast(LoadControl("popup.ascx"), ASP.popup_ascx)
AddHandler uc.ButtonClicked, AddressOf Me.uc_ButtonClicked
PlaceHolder1.Controls.Add(uc)
End Sub
Protected Sub uc_ButtonClicked(ByVal sender As Object, ByVal e As MyEventArgs)
myDropDownList.SelectedItem = e.Index
End Sub
</code>
<code>
'C#=================================================================
protected void Button_Click(object sender, EventArgs e)
{
OnButtonClicked();
}
protected void OnButtonClicked()
{
int index = 1;
if (ButtonClicked != null) {
ButtonClicked(this, new MyEventArgs(index));
}
}
public event EventHandler<MyEventArgs> ButtonClicked;
'VB=================================================================
Protected Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
OnButtonClicked()
End Sub
Protected Sub OnButtonClicked()
Dim index As Integer = 1
RaiseEvent ButtonClicked(Me, New MyEventArgs(index))
End Sub
Public Event ButtonClicked As EventHandler(Of MyEventArgs)
</code>Sv: Vad beror det på
EDIT:
Felmeddelandet påstår att din eventhandler har följande signatur:
uc_ButtonClicked(sender As Object, e As System.EventArgs)
Men ditt kodexempel säger något annat. Någonstanns är det fel. kolla så att din handler (uc_ButtonClicked) faktiskt har rätt signatur. Dvs tar in en object parameter och en av typen MyEventArgs
Det SKA funka...jag lovar...
Sv:Vad beror det på
men är det rätt att jag infogade :
<code>
Public Class MyEventArgs
Inherits EventArgs
Public ReadOnly Index As Integer
Public Sub New(ByVal index As Integer)
index = index
End Sub
End Class
</code>
i popup classen i popup.ascx ?Sv:Vad beror det på