Unionblitz
asked on
ViewState Issue for User Control
Hi. I currently have a user control that is sitting on the UI/Presentation Layer like so:
1. Default.aspx has the User Control in the design area.
2. The User Control is setting an event for a delegate.
3. The page reloads when the "Update" button is pressed within the User Control.
4. (After pressing Update from the User Control), On the Page_Load in Default.aspx.cs, if I look at the event value for the user control (CtnlEditTask.CurrentTaskC lick), it shows up null. That event should be set up (see step 2).
How can I get the page_load to properly remember what the event's prior setting is?
1. Default.aspx has the User Control in the design area.
2. The User Control is setting an event for a delegate.
3. The page reloads when the "Update" button is pressed within the User Control.
4. (After pressing Update from the User Control), On the Page_Load in Default.aspx.cs, if I look at the event value for the user control (CtnlEditTask.CurrentTaskC
How can I get the page_load to properly remember what the event's prior setting is?
Default.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
CtnlEditTask.EnableViewState = true;
if (!IsPostBack)
{
this.ReloadTasks(null, EventArgs.Empty);
}
else
{
CtnlEditTask.CurrentTaskClick += new TaskUpdateHandler(ReloadTasks);
}
}
Control_EditTask.ascx.cs:
public delegate void TaskUpdateHandler(object sender, EventArgs e);
public partial class Control_EditTask : System.Web.UI.UserControl
{
private int _taskID = 0;
private TaskUsers _taskUsers = new TaskUsers();
private Task _task = null;
private TaskTopics _topics = null;
public event TaskUpdateHandler CurrentTaskClick;
protected void Page_Load(object sender, EventArgs e)
{
CurrentTaskClick += new TaskUpdateHandler(this.cmdUpdate_Click);
}
...
protected void cmdUpdate_Click(object sender, EventArgs e)
{...}
}
ASKER
I want to have a aspx page call a method within that aspx page when an event (like a button being pressed) is fired in a user control.
I have a default.aspx page that has a user control. The user control has some text fields and a button, " btnUpdate". When the btnUpdate is pressed, I want that user control to update itself, and then I want default.aspx to call a method from within default.aspx (so default.aspx gets updated as well).
Ideas?
I have a default.aspx page that has a user control. The user control has some text fields and a button, " btnUpdate". When the btnUpdate is pressed, I want that user control to update itself, and then I want default.aspx to call a method from within default.aspx (so default.aspx gets updated as well).
Ideas?
I am not understanding that you want to transfer call event from UserControl to page.
1. ASPX
- Has User Control.
- On Button Update click in UserControl you want to indicate this update in DEfault.aspx too.
Am i right ?
1. ASPX
- Has User Control.
- On Button Update click in UserControl you want to indicate this update in DEfault.aspx too.
Am i right ?
ASKER
That's correct- On Button Update click in UserControl should trigger an event in Default.aspx, which will be mapped to a method in Default.aspx...
A user control contains content that needs to refresh other elements on the Default.aspx page.
Ideas?
A user control contains content that needs to refresh other elements on the Default.aspx page.
Ideas?
Hello ,
Please try attached sample.
Please try attached sample.
/* WebUserControl.ascx */
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
/* WebUserControl.ascx.cs */
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class WebUserControl : System.Web.UI.UserControl
{
public delegate void TaskUpdateHandler(object sender, EventArgs e);
public event TaskUpdateHandler CurrentTaskClick;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
// Do stuff for button and than fire event.
Response.Write("This is control event");
if (CurrentTaskClick != null)
{
CurrentTaskClick(sender, e);
}
}
}
/* ASPX PAge */
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:WebUserControl ID="WebUserControl1" runat="server" />
</div>
</form>
</body>
</html>
/* default.aspx.cs */
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
WebUserControl1.CurrentTaskClick += new WebUserControl.TaskUpdateHandler(WebUserControl1_CurrentTaskClick);
if (!Page.IsPostBack)
{
this.WebUserControl1_CurrentTaskClick(this.WebUserControl1, EventArgs.Empty);
}
}
void WebUserControl1_CurrentTaskClick(object sender, EventArgs e)
{
Response.Write("This is in page");
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Jinal, thank you for your help! It took a little tweeking on my end to get the delegate to work, but the code you provided was exactly what I was looking for.
Please explain what you want to achive ?