C# - ASP Event Delegation Between User Controls
Mar 31, 2010
Give the following control hierarchy on a ASP.NET page:
Page
HeaderControl (User Control)
TitleControl (Server Control)
TabsControl (User Control)
other controls
I'm trying to raise an event (or some notification) in the TitleControl that bubbles to the Page level. Then, I'd like to (optionally) register an event handler at the Page codebehind that will take the EventArgs and modify the TabsControl in the example above. The important thing to note is that this design will allow me to drop these controls into any Page and make the entire system work seamlessly if the event handler is wired up. The solution should not involve a call to FindControl() since that becomes a strong association. If no handler is defined in the containing Page, the event is still raised by TitleControl but is not handled.
My basic goal is to use event-based programming so that I can decouple the user controls from each other. The event from TitleControl is only raised in some instances, and this seemed to be (in my head) the preferred approach. However, I can't seem to find a way to cleanly achieve this. Here are my (poor) attempts:
Using HttpContext.Current.Items
Add the EventArgs to the Items collection on TitleControl and pick it up on the TabsControl. This works but it's fundamentally hard to decipher since the connection between the two controls is not obvious.
Using Reflection
Instead of passing events, look for a function on the container Page directly within TitleControl as in: Page.GetType().GetMethod("TabControlHandler").Invoke(Page, EventArgs);
This will work, but the method name will have to be a constant that all Page instances will have to defined verbatim. I'm sure that I'm over-thinking this and there must be a prettier solution using delegation, but I can't seem to think of it.
View 4 Replies
Similar Messages:
Dec 2, 2010
my ASP.NET web application uses windows authentication on our intranet. I want it to be able to make a server-side http request to another server on the same domain that also requires windows authentication. I've followed the instructions on temporarily impersonating the authenticated user when making the additional request here: [URL] Using code like this:
using System.Security.Principal;
// Obtain the authenticated user's Identity
WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
// Start impersonating
ctx = winId.Impersonate();
// Now impersonating
// Access resources using the identity of the authenticated user
var request = WebRequest.Create("http://intranet/secureapp");
request.Credentials = CredentialCache.DefaultCredentials;
var response = request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
Response.Write(streamReader.ReadToEnd());
}
}
// Prevent exceptions from propagating
catch
{
}
finally
{
// Revert impersonation
if (ctx != null)
ctx.Undo();
}
// Back to running under the default ASP.NET process identity
But, unfortunately, I always get a 401 unauthorized error. Do I need to configure our webserver with active directory to allow it to delegate the autenticated user (could be any one of about 200 users, so don't want to have to do anything 200 times :))? If so, can anyone tell me how to do this?
View 1 Replies
Sep 3, 2010
I have an ASP.NET 2.0 web app which calls a one way web method on a web service. This web method contacts remote servers and pulls back config information to confirm the state of new server builds (settings etc) and inserts the collected data into a SQL database. The web app is supposed to pass through the callers kerberos ticket to the web service and then again to the newly built server which is being checked, all via impersonation and delegation using the calling users administrator privileges.
The trouble is, I just can't get the web service to run under the callers context. I have the SPN's set up, delegation turned on in the active directory objects for the computer running the web app and service and the worker process domain user service account. I have windows authentication on and impersonation set to true in both the web app and service's web.config, integrated authentication in IIS, and IE settings are all ok. All has been checked out and passes the tests in DelegConfig, but it still won't work.
It appears that any data that's is written to the database is written under the context of the web pool service account, and not the calling users, plus along with the fact that I get access denied messages when trying to collect data from the server says impersonation isn't working. Also, is it possible to run the checks under the calling users context, but write to the database with the web pool identity service account without specifying the user details in the web config?? I am working in a secure environment and we must user windows based accounts only, no SQL accounts.
View 1 Replies
Nov 10, 2010
I want to use IIS impersonation to connecto to a SQL server database as the user who is currently accessing a website. This is for auditing and security reasons. I've done some reading and discovered that because the SQL Server is on a sepearate physical server I need to enable Protocol Transitioning and Constrained delegation for the server that's running IIS. This is the article that I found. [URL] I didn't realise at the time I first read it but this article has the following header. Retired Content
This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. What I want to know is, does the information in the article still apply, if I want to impersonate the user all the way to the SQL Server, do i still need Constrained Delegation or has this been implemented in some other way for ASP.NET 4?
View 1 Replies
Feb 14, 2013
I have page having two user controls. Now I have a requirement for which i have to trigger one user control event from another user control.
View 1 Replies
Apr 24, 2010
Using vb.net/asp.net 2005.
I have a page books.aspx that has a control named authors.ascx.
Inside the authors control there is a "select" button I want to add some kind of listener or event handler (not sure of the correct terminology) so on the parent page (books.aspx) I can respond to the "select" button being clicked.
I have to pass the authorID from the user control to the parent page.
In my authors.ascx control I just created this event:
[Code]....
Now I need to write the function for SelectAuthorBtnClick and I think add some kind of listener in the parent page to listen and handle the event.
View 7 Replies
Mar 1, 2011
I have a gridview called gvResults. In the gvResults_RowEditing event I add a row below the one selected. In that new row, which spans all columns, I insert a user-control. There are two buttons and some textboxes in the user control.
My problem is that when I click one of the user-control buttons it never gets to the button event handler, I think because the user control is not recreated on the page postback. How can I have the user-control events fire before the parent page events fire?
I tried using an update panel, but I still get the parent posting back before the user-control events.
View 3 Replies
Jan 19, 2010
I've just slapped together a new user control and I need to add a OnClick event to it so I can handle it via page code behind.
I've never had to do it before so if someone would be kind enough to shead some light that'd be fantastic.
View 3 Replies
Oct 13, 2010
I have Gridview which allows user to edit record.I already build the event to save the new record, time and user machine information to a log database.However, this means a whole record is saved to the log... if the user just change one or two column/field out of say 20 fields, then there is a lot of waste. Also the change is not obvious.How can I log exactly which field(s) was changed in the record ?
View 1 Replies
Mar 4, 2010
I am trying to catch an event that is in a user control inside a master page contentholder and refresh the content page. I am having a hard time finding a good example. Even on this site I am timing out on search.
View 3 Replies
Jul 15, 2010
I have a situation where I dynamically load one of twenty user controls at a time in an ASP.net web page. Based on much reading I've done, I understand that I am to reload the user control upon postback via the Page_Init event handler. This I've done and it seems to work fine.
But now I would like to wire up assorted controls in the user controls such that when the value of each is changed, an event is fired and the web page is notified. Here's an example of how I'm doing that:
userControl.NewData_Handler += new EventHandler(UserControl_NewData_Handler);
There's a problem though. Because the user control is being done in Page_Init (ie. before Page_Load) I don't believe that a line of code such as the one above can function yet.
So I'm wondering what the best practice to do this is. It occurred to me that perhaps I could execute the line in the Page_Load event handler but I'm not sure if that's correct or not.
View 2 Replies
Feb 1, 2010
I have a user control with a datalist loaded on my web page and also a web form to add another entry to the datalist when the button to submit the new entry I need to reload the user contol to show the new entry
<h1>Admin</h1>
<h2>News</h2>
<asp:label ID="lblSearch" Text="Select News: " runat="server" />
<asp:DropDownList ID="NewsList" runat="server" CssClass="DropDownMenu" />
<asp:Button ID="btnSearch" Text="Search" runat="server" OnClick="btnSearch_Click" />
<br />
<br />
<asp:Label ID="dbErrorMessage" ForeColor="Red" runat="server" />
<asp:Label ID="Successfulmessage" runat="server" />
<br />
<asp:Label ID="lblTitle" runat="server" Text="Title" CssClass="TextBoxLabel" />
<br />
<asp:TextBox ID="txtTitle" runat="server" CssClass="TextBox" />
<br />
<br />
<asp:Label ID="lblNews" runat="server" Text="News" CssClass="TextBoxLabel" />
<br />
<asp:TextBox ID="txtNews" runat="server" TextMode="MultiLine" Width="500px" Rows="10" CssClass="TextBox" />
<br />
<asp:Button ID="btnSubmit" Text="Submit" runat="server" Onclick="btnSubmit_Click" />
<asp:Button ID="btnUpdate" Text="Update" runat="server" OnClick="btnUpdate_Click" />
<asp:Button ID="btnDelete" Text="Delete" runat="server" OnClick="btnDelete_Click" />
<br />
<br />
<uc1:NewsList ID="NewsList1" runat="server" />
<br />
protected void btnSubmit_Click(object sender, EventArgs e)
{
// Define data objects
SqlConnection conn;
SqlCommand comm;
// Read the connection string from Web.Config
string connectionString = ConfigurationManager.ConnectionStrings["platiummindproductions"].ConnectionString;
// Initialise connection
conn = new SqlConnection(connectionString);
// Create Command
comm = new SqlCommand("INSERT INTO News (Title, Date, News) VALUES (@Title, @Date, @News)", conn);
// Add command parameters
comm.Parameters.Add("@Title", System.Data.SqlDbType.NVarChar, 50);
comm.Parameters["@Title"].Value = txtTitle.Text;
comm.Parameters.Add("@Date", System.Data.SqlDbType.DateTime);
comm.Parameters["@Date"].Value = DateTime.Now;
comm.Parameters.Add("@News", System.Data.SqlDbType.NVarChar, 4000);
comm.Parameters["@News"].Value = txtNews.Text;
// Enclose database in try-catch-finally
try
{
// Clear message labels
Successfulmessage.Text = "";
dbErrorMessage.Text = "";
// Open the connection
conn.Open();
// Execute the command
comm.ExecuteNonQuery();
DataBind();
// Display sussessful message
Successfulmessage.Text = "News Updated successfully!";
}
catch
{
// Display error message
dbErrorMessage.Text = "Error updating the News details! Please try again later!";
}
finally
{
// Close the connection
conn.Close();
}
}
View 1 Replies
Dec 4, 2012
I have created a user control. Usercontrol contain a image. Attached a click event on image jusing javascript function.
image.onclick = function (e) { //some code };
Now this user control is added on aspx page. Thsi is working file first time. however when the page is getting postback this event is not working.UserControl EnableViewstate is true.What should be done?
View 1 Replies
Dec 23, 2010
I have a datalist that loops thru cart items. Within the datalist template I call a user control that has a small form that gets repeated for each item. When this control is called outside of the datalist, the form submits fine, but when called within the datalist the button has no event action. I've tried adding an event handler to ItemDataBound of the datalist, but still no event action. How can I get my form to submit?
View 8 Replies
Apr 25, 2014
I have a ShoppingCart UserControl on MasterPage. I have a following functionality: User adds item to the cart. after clicking the button "Complete Sale" in UserControl the page is redirected to "CustomerInfo.aspx" and after filling the Customer information and clicking on submit which is on CustomerInfo.aspx page i want to call the "Complete Sale" click event of UserControl from "Customerinfo.aspx" page.
Customerinfo.aspx.cs
protectedvoid btnSubmit_Click(object sender, EventArgs e)
{
try
{
bool val = false; int retVal = 0;
CustomerBiz objCust = newCustomerBiz();
objCust.FirstName = txtFirstName.Text.Trim();
[code].....
Here the Button text changes in UserControl. But i am not able to call the Click event of this button from CustomerInfo.aspx (ContentPage)?
View 1 Replies
Jan 19, 2011
Is there any way for one user control to raise an event that is handled by another user control without going through the page? I am using Umbraco and do not have access to the page object.
--Edit--
Umbraco has the idea of Macro's (user controls) that it loads into pages. I can't access the page directly as this is part of the framework.
There is a publish subscribe (pubsub) pattern that I know would fit my needs well (2 user controls that need to talk to each other) but am unsure how to hook it up in ASP.Net without the page object.
View 1 Replies
Jun 5, 2010
i have some problem with my userControl. Pls look below for better understanding. Pic1. The default page. When i click on the links on the left, userControl will load into the placeHolder as in pic2. But when i click on the Clear button that is inside the userControl, instead of clearing the text in the textbox, it load back to the default page show in pic1. Can anyone pls advise me what went wrong?
View 9 Replies
Jul 7, 2010
I have a user control that's in it a text boxI want add the even TextChanged to that text box too reach from pagesin my user control I have 1 text box and I want reach the its "TextChanged"event to write some cod ein it in my aspx pagelike a normal textox.
View 3 Replies
Oct 21, 2010
I have a problem with button event in web user control
First i have an aspx like this:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddTest.aspx.cs" Inherits="AddTest" %>
<!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>
<script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div id="divContent" runat="server">
</div>
</form>
</body>
</html>
As you see i have a ScriptManager to do with ASP.NET AJAX, a div with ID divContent to load controls, then in code behind:
protected void Page_Load(object sender, EventArgs e)
{
divContent.Controls.Add(LoadControl("~/thitai/addtest.ascx"));
}
I add addtest.ascx to divContent as you see, and this is the code of addtest.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="addtest.ascx.cs" Inherits="thitai.addtest" %>
<asp:UpdatePanel ID="updatePanel" runat="server" ClientIDMode="Static">
<ContentTemplate>
<input type="button" value="Load text" onclick="updPanel('text');return false;" />
<input type="button" value="Load image" onclick="updPanel('image');return false;" />
<asp:HiddenField ID="hftype" runat="server" ClientIDMode="Static" />
<div>
<asp:PlaceHolder ID="plhControl" runat="server"></asp:PlaceHolder>
</div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript">
function updPanel(type) {
$("#hftype").val(type);
__doPostBack("updatePanel", "");
}
</script>
Each time i click on Load text button, i change the value of hfType (hidden field) then do postback to server using UpdatePanel, then this is code behind
protected override void OnPreRender(EventArgs e)
{
string type = hftype.Value;
switch (type)
{
case "text":
plhControl.Controls.Add(LoadControl("~/thitai/test/text.ascx"));
break;
case "image":
plhControl.Controls.Add(LoadControl("~/thitai/test/image.ascx"));
break;
default:
plhControl.Controls.Add(LoadControl("~/thitai/test/text.ascx"));
break;
}
base.OnPreRender(e);
}
This is the code of text.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="text.ascx.cs" Inherits="thitai.test.text" %>
<%@ Register Assembly="Support" Namespace="Support.CustomEditor" TagPrefix="Editor" %>
<Editor:CustomEditor ID="edNoidung" runat="server" NoScript="True" Content=""
Height="500" ActiveMode="Design" NoUnicode="True" InitialCleanUp="False" />
<div>
<asp:Button ID="Button1" runat="server" Text="Show HTML"
onclick="Button1_Click" />
</div>
<div id="showHtml" runat="server"></div>
And code behind of text.ascx
protected void Button1_Click(object sender, EventArgs e)
{
showHtml.InnerHtml = edNoidung.Content;
}
The problem is: when i click to button1, the page do a postback using AJAX but event Button1_Click DOES NOT FIRE!
View 1 Replies
May 18, 2010
In aspx page, I am using a user control which contains a button. I need to hide the button(which is in user control) when a checkbox(in aspx) is clikced. I have a postback for checkbox. I want to hide the button when the checkbox is checked. In which event I should do the hiding and unhiding?I cannot add extra property in user control. Is it possible to access the button using FindControl and disable it? Which event can be used for it?
View 3 Replies
Jul 19, 2010
why the gridview RowDataBound event fires during a select command. I only expect it to run when the gridview is being populated with data. Is there some way to stop it from running when the select command is triggered?
View 3 Replies
Sep 3, 2010
I have one Datagrid with Footer. Footer Row Contains Input fields with one Button to add New Values. I have button click event but not getting fires. my code follows:
[code]....
View 2 Replies
Sep 29, 2010
I got an event handler like this, in this event, i wanted to call another button click event. How can I do that?
[Code]....
if (ds.Tables[0].Rows.Count == 0)
View 3 Replies
May 8, 2010
I am facing one strange problem,I have a gridview in which the last two columns have checkboxes and on those checkboxes click event I am doing some database operations.I also have one checkbox that is outside the gridview which actually shows or hides some of the gidview columns.This was all working well but now I have shifted that grid to a user control because I have to use it in two pages.The problem now is,When the page first loads and I click the check box or any control in the page that is outside the grid then it works perfectly.But once I click any of the check box within grid view column then its behavior chages, now even if I click the checkbox that is outside the grid then also the checkbox_CheckedChanged event of the checkbox that is whithin gridview is fired.That checkbox event then behaves something like a page_load event that is called for every page load and for every event with in the page after it is called once.
View 3 Replies
Jan 24, 2016
[URL] how to handle item command event in above example?
View 1 Replies