Click here to Skip to main content
15,909,953 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi.
I have a bit of Situation communicating in between Master Pages..
Here is my Scenario
I have a Master Page(Top) named "MainMasterPage" which have a button and a text box in it.
Then a Second Master Page named "CategoryMasterPage" which is Child of the main.
Then there is a page "SearchResults.aspx" which have a repeater control in it.

now all I want is that when i click the button (which is in mainMasterPage), it should trigger its event in searchResults.aspx instead of the cs file of it own masterpage.
so that i can access searchResults.aspx's control to append data easily.
in other words I want text box data in searchResults page when the button is clicked.

I've followed this link too Master Page, Child Pages: Dynamic Communication Flexibility[^]

but its only valid while working with one master and one child. I am having problem due to nested master pages..

Thanks.
Posted

1 solution

Use this code

MasterPageMain.master

XML
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPageMain.master.cs"
    Inherits="MasterPageMain" %>

<!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>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td>
                    <asp:TextBox runat="server" ID="txtSearch"></asp:TextBox>
                </td>
                <td>
                    <asp:Button runat="server" ID="btnSearch" Text="Search" />
                </td>
            </tr>
        </table>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html

>

MasterPageMain.master.cs

C#
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class MasterPageMain : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public Button refbtnSearch
    {
        get { return btnSearch; }
    }

    public TextBox reftxtSearch
    {
        get { return txtSearch; }
    }
}


MasterPageCategory.master

XML
<%@ Master Language="C#" MasterPageFile="~/MasterPageMain.master" AutoEventWireup="true"
    CodeFile="MasterPageCategory.master.cs" Inherits="MasterPageCategory" %>
<%@ MasterType VirtualPath="~/MasterPageMain.master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
</asp:Content

>

MasterPageCategory.master.cs

C#
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class MasterPageCategory : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    public Button refbtnSearch
    {
        get { return Master.refbtnSearch; }
    }

    public TextBox reftxtSearch
    {
        get { return Master.reftxtSearch; }
    }
}



SearchResults.aspx

XML
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPageCategory.master" AutoEventWireup="true"
    CodeFile="SearchResults.aspx.cs" Inherits="SearchResults" %>
    <%@ MasterType VirtualPath="~/MasterPageCategory.master" %>
<%-- Add content controls here --%>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <table>
        <tr>
            <td>
                <asp:Repeater ID="Repeater1" runat="server">
                    <HeaderTemplate>
                        <table border="1" width="100%">
                            <tr>
                                <th>
                                    ID
                                </th>
                                <th>
                                    Name
                                </th>
                            </tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr>
                            <td>
                                <%# Eval("Id") %>
                            </td>
                            <td>
                                <%# Eval("Name")%>
                            </td>
                        </tr>
                    </ItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:Repeater>
            </td>
        </tr>
    </table>
</asp:Content

>

SearchResults.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class SearchResults : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Repeater1.DataSource = getData();
            Repeater1.DataBind();
        }

        Master.refbtnSearch.Click += new EventHandler(doSearchMaster);
    }

    private DataTable getData()
    {
        DataTable dt = new DataTable();
        if (ViewState["dt"] != null)
            dt = (DataTable)ViewState["dt"];
        else
        {
            dt.Columns.Add("Id");
            dt.Columns.Add("Name");
            for (int i = 0; i < 20; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Id"] = i;
                dr["Name"] = "Name-" + i.ToString();
                dt.Rows.Add(dr);
            }
            ViewState["dt"] = dt;
        }
        return dt;
    }

    public void doSearchMaster(object sender, EventArgs e)
    {
        DataTable dt = getData();
        DataView dv = new DataView(dt);
        dv.RowFilter = "Name LIKE '%" + Master.reftxtSearch.Text.Trim() + "%'";
        Repeater1.DataSource = dv.ToTable();
        Repeater1.DataBind();
    }
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900