cokMedlem sedan dec. 2005664 inlägg 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>
Fråga: När kommer CustomEvent exekveras?
cokMedlem sedan dec. 2005664 inlägg 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.
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 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?
Fungerar den så är det väl bra? =)
cokMedlem sedan dec. 2005664 inlägg
onkelborg skrev:
Fungerar den så är det väl bra? =)
Känns som det borde finnas en "snyggare" lösning.