Je suis désolé, mais je ne peux pas comprendre pourquoi cela ne fonctionne pas. Après avoir compilé, je reçois une "exception de référence nulle". S'il vous plaît aider. et UI: P> <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="labs_test" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
Type in text and then click button to display text in a Label that is in the MasterPage.<br />
This is done using FindControl.<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" /><br />
<br />
Choose an item from the below list and it will be displayed in the Label that is
in the MasterPage.<br />
This is done using FindControl.<br />
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem>Item 1</asp:ListItem>
<asp:ListItem>Item 2</asp:ListItem>
<asp:ListItem>Item 3</asp:ListItem>
</asp:DropDownList>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</asp:Content>
3 Réponses :
(Notez que cela est pratique comme un Méthode d'extension ). p> p> FindControl code> uniquement sur les enfants immédiats (techniquement à la suivante NamingContainer ), pas l'intégralité de l'arbre de contrôle. Étant donné que
Label1 code> n'est pas un enfant immédiat de
maître code>,
maître.findcontrol code> ne le localisera pas. Au lieu de cela, vous devez soit faire
FindControl code> sur la commande parent immédiate, ou faire une recherche de contrôle récursive:
Comment diriez-vous de dire la page de contenu où votre page maître est p> puis faisant un méthode dans le maître comme p> et appelez-le dans le code de la page derrière. p> Si c'est simplement sur la même page, appelez simplement label1.text = sulsing;
Ou si vous avez besoin d'une raison pour une raison quelconque, vous devez utiliser FindControl, modifiez votre maître.FindControl sur FindControl P> P>
+1, a supprimé ma réponse. C'est un moyen beaucoup plus facile d'accomplir ce que vous voulez.
Avec la courtoisie de M. Atwood lui-même , voici une version récursive de la méthode. Je recommanderais également des tests pour NULL sur le contrôle et j'ai inclus comment vous pouvez modifier le code pour le faire également.
protected void Button1_Click(object sender, EventArgs e) { if (TextBox1.Text != "") { Label Label1 = FindControlRecursive(Page, "Label1") as Label; if(Label1 != null) Label1.Text = "<b>The text you entered was: " + TextBox1.Text + ".</b>"; } } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { Label Label1 = FindControlRecursive(Page, "Label1") as Label; if (Label1 != null) Label1.Text = "<b>You chose <u>" + DropDownList1.SelectedValue + "</u> from the dropdown menu.</b>"; } private Control FindControlRecursive(Control root, string id) { if (root.ID == id) return root; foreach (Control c in root.Controls) { Control t = FindControlRecursive(c, id); if (t != null) return t; } return null; }
Bon pour quand FindControl doit être utilisé, mais dans cette question, la recherche de la contence est surchargée.
Où obtenez-vous l'exception de référence NULL?
Label1.text = " Vous avez choisi " + dropdowdlist1.selectedValue + " u> dans le menu déroulant. B>";