• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 921
  • Last Modified:

How to raise masterpage event from dynamic usercontrol?

I have a masterpage that dynamically loads a usercontrol. The masterpage has a public method that raises a public event. I want the usercontrol to call that method to raise the event so the web page can respond to it. Unfortunately, I can't get my usercontrol to recognize the masterpage method. It says my method is not a member of System.Web.UI.MasterPage.

Here's my masterpage code:
Partial Class Master_Mobile
    Inherits System.Web.UI.MasterPage

    Public Event Login()
    Public Sub RaiseLogin()
        RaiseEvent Login()
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Create Dynamic Controls
        If ShowLogin And Me.MasterLogin.Controls().Count = 0 Then
            Dim ucLogin As UserControl = LoadControl("~/UserControls/Login.ascx")
            Me.MasterLogin.Controls.Add(ucLogin)
        End If
    End Sub

Open in new window


Here's my usercontrol code:
    Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
        Call Page.Validate()

        If Page.IsValid Then
            ' Return to caller
            Call Page.Master.RaiseLogin()     ' THIS LINE FAILS
        End If
    End Sub

Open in new window


What's the correct way to call the public method from this dynamically loaded usercontrol? Thanks in advance.
0
ZekeLA
Asked:
ZekeLA
  • 4
  • 2
  • 2
2 Solutions
 
ZekeLAAuthor Commented:
I don't have nested master pages and that link shows how to find a control from a page which is not what I have. Please explain how that applies to my situation.
0
 
YZlatCommented:
this part should be helpful in assigning event to your control:

MasterPageFile = "your masterPage";

Control c = (Control)Master.FindControl("Control Id")

c.Event = New EventHandlet(EventsName);

0
Granular recovery for Microsoft Exchange

With Veeam Explorer for Microsoft Exchange you can choose the Exchange Servers and restore points you’re interested in, and Veeam Explorer will present the contents of those mailbox stores for browsing, searching and exporting.

 
kris_perCommented:

Check out this link => http://msdn.microsoft.com/en-us/library/c8y19k6h.aspx

To see the method of a master page in the content page, you have  to 'strong-type' the master page in content page as following:

<%@ Page  .....
<%@ MasterType  virtualPath="~/MasterPage.master"%>  <= add this line after the Page directive at the top...

now in the cs file of the content page, you can do like:

protected void Page_Load(object sender, EventArgs e)
{
    CompanyName.Text = Master.CompanyName; // CompanyName is a property in master page
}

OR in a button click method
{
    Master.RaiseLogin();
}
0
 
ZekeLAAuthor Commented:
kris, I can't strongly type it that way because it's a usercontrol. <%@ MasterType  virtualPath="~/MasterPage.master"%>  doesn't work for the Control directive. I tried <%@ Reference Control="~/Layouts/MyMaster.master"%> but that still doesn't expose the my master page class. When I use the object browser I can't find my master page class in my project's namespace.
0
 
ZekeLAAuthor Commented:
Yzlat, I don't understand your suggestion. I don't need to assign the masterpage. it is the usercontrol that can't find the master page's method. Not the page. It makes no sense to search for the control from within the control. Can you be more specific and / or reference the original code I posted?
0
 
kris_perCommented:

@ MasterType directive can be added only in content page file. i think it is not for controls....below is some code with delegates/events for your code..see if this helps....

In User control class file:

     Delegate Function LoginEvent() As String

     Public Dim LoginEventHandler As LoginEvent

     Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
        Call Page.Validate()

        If Page.IsValid Then
            ' Return to caller
            ' Call Page.Master.RaiseLogin()     ' THIS LINE FAILS
            LoginEventHandler ( ) ' CALL DELEGATE function
        End If
    End Sub




in masterpage code :

Partial Class Master_Mobile

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Create Dynamic Controls
        If ShowLogin And Me.MasterLogin.Controls().Count = 0 Then
            Dim ucLogin As UserControl = LoadControl("~/UserControls/Login.ascx")
            ucLogin.LoginEventHandler = New LoginEvent(AddressOf Login) ' ADD THIS LINE - TO PASS Login function as delegate
            Me.MasterLogin.Controls.Add(ucLogin)
        End If
    End Sub

    Public Function Login()  As String
        ' this is the function that will get called when submit button is clicked in user control
    End Sub

Open in new window

0
 
ZekeLAAuthor Commented:
I finally figured out my problem. I didn't include the usercontrol reference on my master page. Once I added

<%@ Register TagPrefix="uc1" TagName="Login" Src="~/UserControls/Login.ascx" %>

I was able to change my master page code as shown below. Thanks to both for your guidance and suggestions.


    Public Event MasterLoggedIn(ByVal sender As Object, ByVal e As EventArgs)

    Protected Sub ProcessLogin(ByVal sender As Object, ByVal e As System.EventArgs)
         RaiseEvent MasterLoggedIn(Me, New EventArgs())
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Create Dynamic Controls
        If ShowLogin Then
            Call AddLogin()
        End If

        ' Content Visibility
        Me.MasterContent.Visible = Not ShowLogin
        Me.MasterLogin.Visible = ShowLogin
    End Sub

    Protected Sub AddLogin()
        Dim uc As MyNamespace.UCLogin = LoadControl("~/UserControls/Login.ascx")
        Me.MasterLogin.Controls.Add(uc)
        AddHandler uc.LoggedIn, AddressOf ProcessLogin
    End Sub

Open in new window

0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now