2015-08-02 2 views
1

Как я могу сделать элемент управления, который добавляется только к MasterPages? или просто, как я могу узнать, добавлен ли элемент управления в MasterPage aspx или добавлен в обычный WebForm, который наследуется от System.Web.UI.Page?

Я хочу поставить контроль на главной странице, как это:ASP.NET MasterPage только управляет?

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="SkolaControlsWorkings.Site1" %> 
<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <cc1:MasterPageOnlyControl runat="server" /> 
    </div> 
    </form> 
</body> 
</html> 


Но не следует принимать для использования в обычном WebForm как этот

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="SkolaControlsWorkings.WebForm3" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="Main" runat="server"> 
    <cc1:MasterPageOnlyControl runat="server" /> 
</asp:Content> 


Благодарю.

+0

некоторый код, пожалуйста, показывают, что у вас есть попробовать .... не ожидайте от нас, чтобы сделать и пример, и решение – Aristos

+1

я добавил пример кода, спасибо. –

+0

Никогда не делал этого, но я думаю, что это возможно, спросив родительский объект. Если это шедевр, тогда все в порядке, если это что-то еще, выкидывать из себя. – gsharp

ответ

0

Для доступа к нему с веб-страницы вам необходимо обратиться к главной странице.

Вот как вы это делаете.

Master Page

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

<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %> 

<!DOCTYPE html> 

<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> 

     <uc1:WebUserControl ID="WebUserControl1" runat="server" /> 

     <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">   
     </asp:ContentPlaceHolder> 
    </div> 
    </form> 
</body> 
</html> 

Master Page Код За

public partial class Dokimes_so_MasterPage : System.Web.UI.MasterPage 
{ 
    // here we expose the control to public 
    public Dokimes_so_WebUserControl getCustomControl 
    { 
     get 
     { 
      return WebUserControl1; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

одной странице базы на этой главной странице

обратите внимание на эту ссылку: <%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %> вам это нужно, чтобы страница теперь может быть классом пользовательского элемента управления.

<%@ Page Title="" Language="C#" MasterPageFile="~/Dokimes/so/MasterPage.master" AutoEventWireup="true" CodeFile="GetControl.aspx.cs" Inherits="Dokimes_so_GetControl" %> 


<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
</asp:Content> 

и код за

public partial class Dokimes_so_GetControl : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // first you get the upper "master" 
     // then you get the custom control 
     // then you access a property inside the custom control 
     ((Dokimes_so_MasterPage)Master).getCustomControl.cSetText = "test"; 
    } 
} 

И пользовательский элемент управления

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="Dokimes_so_WebUserControl" %> 

<asp:Literal runat="server" ID="txtTest"></asp:Literal> 

и код за

public partial class Dokimes_so_WebUserControl : System.Web.UI.UserControl 
{ 
    public string cSetText 
    { 
     set 
     { 
      txtTest.Text = value; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

Некоторые подобные ответы:
ASP.NET how to access public properties?

+0

Это не то, о чем я прошу, сначала это хорошо, вопрос заключается в том, чтобы выбросить исключение, если элемент управления используется в WebForm не на MasterPage. –

+0

@AbdelfattahRagab Вы можете использовать этот код, чтобы добавить его в свой вопрос. В тот момент, когда вы можете увидеть, как получить доступ к элементу управления, вы можете просто добавить «if», чтобы увидеть, существуют ли. Я демострирую здесь, как получить доступ к управлению ... сделать все остальное не так сложно. – Aristos

Смежные вопросы