Comment accéder facilement à un contrôle dans un page imbriquée?ASP.NET - FindControl dans la page maître imbriquée
Accès commandes page principale est généralement simple:
Dim ddl As DropDownList = Master.FindControl("ddl")
Cependant, lorsque ma configuration est comme suit le contrôle ne peut pas être trouvé, sans doute cela parce que le contrôle est dans un bloc content
:
1 maître racine
<asp:ContentPlaceHolder ID="cphMainContent" runat="server" />
2 Nested Maître
<%@ Master Language="VB" MasterPageFile="~/Root.master" AutoEventWireup="false" CodeFile="Nested.master.vb" Inherits="Nested" %>
<asp:Content ID="MainContent" ContentPlaceHolderID="cphMainContent" runat="server">
<asp:DropDownList ID="ddl" runat="server" DataTextField="Text" DataValueField="ID"/>
</asp:Content>
3 Sommaire Page VB.NET
Dim ddl As DropDownList = Master.FindControl("ddl")
Solution
J'ai trouvé une solution en traversant la découverte de l'arbre l'endroit du contenu racine titulaire cphMainContent
et ensuite en cherchant le contrôle à l'intérieur.
cphMainContent = CType(Master.Master.FindControl("cphMainContent"), ContentPlaceHolder)
Dim ddl As DropDownList = cphMainContent .FindControl("ddl")
Cependant cette solution semble très détournée et inefficace.
Le contrôle peut-il être accédé directement depuis le bloc content
de la page maître?
Bien que je ne sache pas exactement pourquoi vos pages sont structurées de cette façon, je vous conseille d'exposer les données de contrôles via les propriétés de votre hiérarchie de pages afin de ne pas avoir à faire la notation par points FindControl ("") vulnérable restructuration et exécutions d'exécution. Au lieu d'exposer les propriétés sur votre page maître, définissez les propriétés sur la page maître, puis accédez-les typesafe à partir des pages enfants. –