найти контроль на странице - PullRequest
10 голосов
/ 23 марта 2012

HTML

<body>
    <form id="form1" runat="server">    
       <asp:Button runat="server" ID="a" OnClick="a_Click" Text="apd"/>    
    </form>
</body>

код

protected  void a_Click(object sender,EventArgs e)
{
    Response.Write(((Button)FindControl("a")).Text);

}

Этот код отлично работает.

Однако этот код:

HTML

 <%@ Page Title="" Language="C#" MasterPageFile="~/Student/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Student_Default" %>


<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:Button runat="server" ID="a" OnClick="a_Click" Text="andj"/>
</asp:Content>

Код

protected void a_Click(object sender, EventArgs e)
{
    Response.Write(((Button)FindControl("a")).Text);
}

Этот код не работает и FindControl возвращает Null - почему это так?

Метод FindControl прекрасно работает на простой странице, но на главной странице не работает?

Идентификатор a изменен на ctl00_ContentPlaceHolder1_a - как найти управление?

Ответы [ 9 ]

31 голосов
/ 23 марта 2012

Чтобы найти кнопку на своей странице содержимого, сначала нужно выполнить поиск элемента управления ContentPlaceHolder1. Затем используйте функцию FindControl на элементе управления ContentPlaceHolder1 для поиска вашей кнопки:

 ContentPlaceHolder cph = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1");
 Response.Write(((Button)cph.FindControl("a")).Text);
4 голосов
/ 23 марта 2012

Вы можете попробовать это ..

this.Master.FindControl("Content2").FindControl("a");

Вы можете обратиться к этой статье ...

http://www.west -wind.com / блог / сообщений / 2006 / Апрель / 09 / Сеть САШ-20-MasterPages-и-FindControl

1 голос
/ 14 августа 2013

, если на странице для поиска нет главной страницы

this.Page.Master.FindControl("ContentPlaceHolder1");

else

this.Page.Master.FindControl("ContentPlaceHolder1").FindControl("controlAFromPage");
0 голосов
/ 01 мая 2015

Чтобы найти элемент управления главной страницы на других страницах, мы можем использовать это:

Button btnphotograph = (Button)this.Master.FindControl("btnphotograph");
btnphotograph.Text="Hello!!";
0 голосов
/ 09 июля 2014

Это должно найти любой элемент управления на странице

private Control FindALL(ControlCollection page, string id)
{
  foreach (Control c in page)
  {
    if (c.ID == id)
    {
      return c;
    }

    if (c.HasControls())
    {
      var res = FindALL(c.Controls, id);

      if (res != null)
      {
        return res;
      }
    }     
  }
  return null;
}

Позвоните как:

Button btn = (Button)FindALL(this.Page.Controls, "a");
btn.Text = "whatever";
0 голосов
/ 25 октября 2013
ContentPlaceHolder cph = (ContentPlaceHolder)this.Master.Master.FindControl("ContentPlaceHolder1");
       Button img = (Button)cph.FindControl("btncreate_email");
0 голосов
/ 23 марта 2012

элементы управления являются вложенными.у вас есть ваша страница, внутри страницы есть больше элементов управления, некоторые из этих элементов управления содержат сами элементы управления.метод FindControl осуществляет поиск только в текущем контейнере именования, или если вы выполняете Page.FindControls, если будете искать только элементы управления в Page, а не в элементах управления внутри этих элементов управления, поэтому вы должны искать рекурсивно.

, если вы знаетекнопка находится внутри заполнителя содержимого, и вы знаете его идентификатор, который вы можете сделать:

ContentPlaceHolder cph = Page.FindControl("ContentPlaceHolder1");
Response.Write(((Button)cph.FindControl("a")).Text);

в качестве альтернативы, если ваши элементы управления глубоко вложены, вы можете создать рекурсивную функцию для поиска этого:

private void DisplayButtonText(ControlCollection page)
{
   foreach (Control c in page)
   {
      if(((Button)c).ID == "a")
      {
         Response.Write(((Button)c).Text);
         return null;
      }
      if(c.HasControls())
      {
         DisplayButtonText(c.Controls);
      }
}

изначально вы бы пропустили эту страницу. Контроль

0 голосов
/ 23 марта 2012

Проверьте, отображается ли идентификатор элемента управления как «а».Используйте Firebug или инструменты разработчика во время загрузки страницы.Вы можете изменить режим идентификатора клиента на статический и каждый раз получать один и тот же идентификатор.

0 голосов
/ 23 марта 2012

Это, вероятно, связано с тем, как ASP.NET называет идентификаторы клиентов для вложенных элементов управления. Посмотрите на исходный код страницы и убедитесь, что именно ASP.NET называет ваш элемент управления.

Например, глядя на мою страницу, я вижу, что кнопка в заполнителе контента выглядит следующим образом:

<input type="submit" name="ctl00$ContentPlaceHolder1$btn1" value="hello" id="MainContent_btn1" />

В этом случае FindControl ("ctl00 $ ContentPlaceHolder1 $ btn1") возвращает ссылку на кнопку.

...