Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


trigga en postback

Postades av 2008-02-13 13:00:09 - Magnus Karlsson, i forum asp.net generellt, Tråden har 31 Kommentarer och lästs av 1082 personer


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?


Svara

Sv: trigga en postback

Postades av 2008-02-13 13:01:22 - Magnus Bergström

Kanske ett ypperligt lage for events?


Svara

Sv:trigga en postback

Postades av 2008-02-13 13:08:33 - Magnus Karlsson


events? exempel.

(får inga svar på sökningar överhuvudtaget. måste vara fel på pelles sökmotor)


Svara

Sv: trigga en postback

Postades av 2008-02-13 13:14:09 - Chris Klug

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...

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 handlern


Svara

Sv:trigga en postback

Postades av 2008-02-13 13:28:23 - Magnus Karlsson



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>


Svara

Sv: trigga en postback

Postades av 2008-02-13 13:50:04 - Chris Klug

Det är klart att den skall avfyras där... Editerar koden nu...
myChildControl är den kontroll som exponerar eventet... dvs den kontroll som innehåller knappen.


Svara

Sv:trigga en postback

Postades av 2008-02-13 13:55:58 - Magnus Karlsson



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 ?


Svara

Sv: trigga en postback

Postades av 2008-02-13 14:05:01 - Chris Klug

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.
<code>
myNamspace.myUserControl uc = (myNamspace.myUserControl)LoadControl("popup.ascx");
uc.ButtonClicked += uc_ButtonClicked;
PlaceHolder1.Controls.Add(uc);
</code>


Svara

Sv:trigga en postback

Postades av 2008-02-13 14:30:07 - Magnus Karlsson



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?


Svara

Sv: trigga en postback

Postades av 2008-02-13 14:35:50 - Chris Klug

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.
myNamspace.myUserControl var meningen att du skulle byta ut till DITT namespace och DIN kontroll klass. Det var pseudo kod...


Svara

Sv:trigga en postback

Postades av 2008-02-13 14:56:25 - Magnus Karlsson

Vad skulle min namespace och min kontroll klass heta? Var hittar jag den? Något jag måste skapa upp?
(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?!


Svara

Sv: trigga en postback

Postades av 2008-02-13 17:20:58 - Chris Klug

I och med att du inte använder namespace så räcker det med namnet på din klass, dvs "popup"


Svara

Sv:trigga en postback

Postades av 2008-02-13 17:27:56 - Magnus Karlsson

Testat med nedan ... men VS säger att Type 'popup' is not defined ..... ??
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>


Svara

Vad beror det på

Postades av 2008-02-13 20:01:15 - Magnus Karlsson


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 ?


Svara

Sv: Vad beror det på

Postades av 2008-02-13 20:24:13 - Magnus Karlsson


<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>

???


Svara

Sv:Vad beror det på

Postades av 2008-02-13 22:26:55 - Chris Klug

Jag kan inte VB men i C# skriver man i alla fall inte
<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...


Svara

Sv: Vad beror det på

Postades av 2008-02-14 08:04:33 - Magnus Karlsson


Ok det är nog detta som är det som ger felmeddelandet.

uc.ButtonClicked finns ingen ButtonClicked under uc


Svara

Sv:Vad beror det på

Postades av 2008-02-14 09:21:17 - Magnus Karlsson

Nu har jag översatt till C#. Vad är fel?

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."


Svara

Sv: Vad beror det på

Postades av 2008-02-14 10:23:13 - Chris Klug

Är barn i det här fallet din pop-up kontroll? Dvs är eventet deklarerat i classen ASP.popup_ascx?


Svara

Sv:Vad beror det på

Postades av 2008-02-14 10:32:33 - Magnus Karlsson

Yes,
Barn = popup.ascx ...

tror det blir ASP.popup_ascx ..


Svara

Sv: Vad beror det på

Postades av 2008-02-14 12:50:48 - Magnus Karlsson

Nu tror jag har fått det att fungera ...

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 ?


Svara

Sv:Vad beror det på

Postades av 2008-02-14 13:07:41 - Chris Klug

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...


Svara

Sv: Vad beror det på

Postades av 2008-02-14 13:15:44 - Magnus Karlsson

Det blir något att bita i... kan inte se detta framför mig ännu.

Föresten Tack för hjälpen!


Svara

Sv:Vad beror det på

Postades av 2008-02-14 15:45:27 - Chris Klug

Du behöver ändra moderkontrollens eventhandler till att ta emot det nya eventarget enligt följande:

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;
   }
}


Svara

Sv: Vad beror det på

Postades av 2008-02-15 08:00:46 - Magnus Karlsson


Var skall man lägga "public class MyEventArgs : EventArgs" ?


Svara

Sv:Vad beror det på

Postades av 2008-02-15 08:26:04 - Magnus Karlsson


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>


Svara

Sv: Vad beror det på

Postades av 2008-02-15 08:55:15 - Chris Klug

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?

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...


Svara

Sv:Vad beror det på

Postades av 2008-02-15 10:07:44 - Magnus Karlsson

Jag betvilar dig inte! Felet måste ligga i converterarens översättning ...

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 ?


Svara

Sv: Vad beror det på

Postades av 2008-02-15 15:09:08 - Magnus Karlsson

Var kan man läsa mer om det som behandlas i denna tråd? Bok? Websida?


Svara

Sv:Vad beror det på

Postades av 2008-02-16 11:12:32 - Chris Klug

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...


Svara

Sv: Vad beror det på

Postades av 2008-02-16 13:51:00 - Magnus Karlsson

Jag har funderat på den. Skall omgående lägga en order på den.


Svara

Sv:Vad beror det på

Postades av 2008-02-16 17:19:02 - Magnus Karlsson

Tips på att skicka start värde från moder.ascx till popup.ascx.

Session ?


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 166
27 952
271 704
760
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies