親ページに含まれるボタンのIDをユーザーコントロールから取得するにはどうすればよいですか?

私はボタンを持つページ内に含まれているユーザーコントロールを持っています。

私はボタンが親ページに存在するかどうかを確認するためにFindControl()を使いたいが、ボタンにはIDがない。

I have tried the following code:

Page.Master.FindControl("ButtonName/Text on button here?")

Is there any way I can do this?

0
あなたがページ上のすべてのボタンコントロールを取得し、次にテキストフィールドを比較することができます。
追加された 著者 DotNetUser,
ボタンがサーバーコントロールの場合は、IDが必要です
追加された 著者 xandercoded,
もっとコードが必要です...
追加された 著者 xandercoded,
どのバージョンの.NETを使用していますか? 2,3、
追加された 著者 Nick Bork,
動的に作成された場合あなたはIDが何であるかをどのように見つけますか?
追加された 著者 Theomax,

3 答え

FindControl()を使用してボタンが親に存在するかどうかを確認したい   ページにはIDがありません。

要素にIDがあり、このボタンがサーバーコントロールである必要があるため( FindControl を使用してこの要素を見つけることはできません)(つまり、runat = "server"がマークアップに設定されています)

このようなシナリオで唯一できることは、プレーヤのJavaScriptやjQueryを使用して、クライアントサイドスクリプトを使用して要素を見つけることです。

2
追加された

動的に作成された場合IDの内容をどのようにして知ることができますか?

ボタンが動的に作成された場合は、手動でIDを割り当てる必要があります。

例:

protected void Page_Load(object sender, EventArgs e)
{

    Button btnFound = (Button)this.FindControl("myButton");
    if (btnFound != null)
    {
        Response.Write("Found It!");
    }
}

protected void Page_Init(object sender, EventArgs e)
{
    Button btn = new Button()
    {
        ID = "myButton",
        Text = "Click Me"
    };

    this.Controls.Add(btn);
}

がんばろう!

1
追加された

asp:Buttonについて話していると仮定すると、テキストで検索する場合は、再帰的な検索ができます。

マスターページ:

 
 
 
     <title></title>
 </head>
 <body>
     <form runat="server">
     <div>
         
             
     </form>
 </body>
 </html>

And a snipet of code to do a recursive find

    protected List FindButton(ControlCollection controls, string buttonText)
    {
       List foundControls = (from c in controls.Cast() where c is Button && ((Button)c).Text == "Test Button" select c).ToList();

       if (foundControls.Count > 0)
           return foundControls;
       else
       {
           foreach (Control ctrl in controls)
           {

               if (foundControls.Count == 0)
                   foundControls = FindButton(ctrl.Controls, buttonText);

               if (foundControls.Count > 0)
                break;

           }
           return foundControls;
       }
    }

And then use:

        List buttons = FindButton(Page.Master.Controls, "Test Button");
        if (buttons.Count > 0)
        {
            ((Button)buttons[0]).Text = "I found it";
        }

This code could be modified in several ways, like instead of stopping after find any buttons, continue the loop finding ALL buttons. It could also be changed to find only a single button and return it instead of a List of controls. You could also modify your query to find controls of a different type.

1
追加された