find control in page

▼魔方 西西 提交于 2019-11-28 12:07:08

To find the button on your content page you have to search for the ContentPlaceHolder1 control first. Then use the FindControl function on the ContentPlaceHolder1 control to search for your button:

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

You may try this..

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

You may refer this article...

http://www.west-wind.com/weblog/posts/2006/Apr/09/ASPNET-20-MasterPages-and-FindControl

if the page to look for has no master page

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

else

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

This is probably due to how ASP.NET names the client IDs for nested controls. Look at the page source and see exactly what ASP.NET is naming your control.

For example, looking at my page I can see that the button within the content placeholder renders like this:

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

In this case FindControl("ctl00$ContentPlaceHolder1$btn1") returns a reference to the Button.

controls are nested. you have your page, inside the page there is more controls, some of these controls contain controls themselves. the FindControl method only searches the current naming container, or if you do Page.FindControls if will only look for the controls in Page, not in the Controls inside those controls so you must search recursively.

if you know the button is inside the content place holder and you know its id you can do:

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

alternatively, if your controls is deeply nested, you can create a recursive function to search for it:

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);
      }
}

initially you would pass this Page.Controls

Joydip Roy
ContentPlaceHolder cph = (ContentPlaceHolder)this.Master.Master.FindControl("ContentPlaceHolder1");
       Button img = (Button)cph.FindControl("btncreate_email");
Joydip Roy

To find the master page control on the other pages we can use this:

Button btnphotograph = (Button)this.Master.FindControl("btnphotograph");
btnphotograph.Text="Hello!!";
eugeniy

This should find any Control on page

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

Call like:

Button btn = (Button)FindALL(this.Page.Controls, "a");
btn.Text = "whatever";

See if the ID of the control is in fact being rendered as 'a'. Use firebug or developer tools while page is loading. You can change client id mode to static and get the same ID each time.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!