webForumDet fria alternativet

Updatepanel med event

.NETur .NET

6 svar · 660 visningar · startad av cok

cokMedlem sedan dec. 2005664 inlägg
#1

Jag har en klass som skickar upp events till aspx-sidan. Problemet är att min label som jag har på en updatepanel inte uppdateras visuelt. Om man tittar på labeln i debugläge så har den olika värden efter varje event.

        void cl1_CustomEvent(object sender, int testCounter)
        {
            Label1.Text = testCounter.ToString();
            UpdatePanel1.Update();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            cl1.Test();
        }

        protected void UpdatePanel1_Init(object sender, EventArgs e)
        {
            cl1.CustomEvent += new TestEventHandler(cl1_CustomEvent);
        }

Vad är det jag missar i aspx-sidan?

r: button1 ligger i updatepanel:n

aspx-sidan:

    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <div>
        <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" RenderMode="Inline" runat="server" OnInit="UpdatePanel1_Init">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
            </ContentTemplate>
            <Triggers> 
                <asp:AsyncPostBackTrigger ControlID="Button1" /> 
            </Triggers> 
        </asp:UpdatePanel>
    </div>
    </form>
onkelborgMedlem sedan juli 2003555 inlägg
#2

Fråga: När kommer CustomEvent exekveras?

cokMedlem sedan dec. 2005664 inlägg
#3

Vid olika tilfällen.

R: alltså, eventet kan triggas då en metod körs som kommer ta väldigt lång tid att köra.

onkelborgMedlem sedan juli 2003555 inlägg
#4

Det måste köras innan servern skickar tillbaka sitt svar, senast innan Render-eventen. Du får hitta på någon trådlåsning eller liknande isf för att lösa problemet

cokMedlem sedan dec. 2005664 inlägg
#5

Som det är nu, skapar jag en tråd vid en postback som kör igång metoden och som sedan tar emot resultat som sparas i session.

Genom ett javascript triggar jag sedan uppdateringen av updatepanelen och som även registrerar att javascriptet ska köras om en viss intervall. känns inte klockrent men en lösning.

    public partial class _Default : Page
    {
        private string Status
        {
            get
            {
                if (Session["Status"] == null)
                    Session["Status"] = string.Empty;

                return Session["Status"].ToString();
            }
            set { Session["Status"] = value; }
        }

        Class1 cl1 = new Class1();

        protected void Page_Init(object sender, EventArgs e)
        {
            UpdatePanel1.Load += new EventHandler(UpdatePanel1_Load);
            cl1.CustomEvent += new TestEventHandler(cl1_CustomEvent);
        }

        void cl1_CustomEvent(object sender, int testCounter)
        {
            Status = testCounter.ToString();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ThreadStart ts = new ThreadStart(this.Go);
            Thread t = new Thread(ts);
            t.Start();
        }

        public void Go()
        {
            cl1.Test();
        }

        protected void UpdatePanel1_Load(object sender, EventArgs e)
        {
            Label1.Text = Status;
            ScriptManager.RegisterStartupScript(this, this.GetType(), "TriggerTimer", "TriggerTimer();", true); 
        }
    }

Kommentarer på lösningen?

onkelborgMedlem sedan juli 2003555 inlägg
#6

Fungerar den så är det väl bra? =)

cokMedlem sedan dec. 2005664 inlägg
#7

onkelborg skrev:

Fungerar den så är det väl bra? =)

Känns som det borde finnas en "snyggare" lösning.

138 ms totalt · 3 externa anrop · v20260731065814-full.a2ca460b
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)