1

テーブルに追加する各テキストボックスに一意の名前を追加しようとしています。

私はもう試した:

TableRow someRow = new TableRow();
TableCell someCell = new TableCell();
TextBox someTextbox = new TextBox();

someTextbox.Attributes.Remove("name");
someTextbox.Attributes.Add("name",itsId);

someCell.Controls.Add(someTextBox);
someRow.Cells.Add(someCell);
theTable.Rows.Add(someRow);

生成されたhtmlには、テキストボックスの属性として私の名前と自動生成された名前の両方が含まれます。

残念ながら、FindControl自分の名前でを実行すると、自動生成された名前で検索することはできますが、null参照を取得します。

自分の名前でコントロールを見つけるにはどうすればよいですか?コントロールの名前が自動生成されるのはいつ/なぜですか?

成功したコード:

TextBox tb =(TextBox)FindControl(autogeneratedID);
WriteToSomeOtherDiv(tb.Text);

失敗したコード:

TextBox tb =(TextBox)FindControl(myId);
WriteToSomeOtherDiv(tb.Text);

4

2 に答える 2

1

ASP.Netのバージョンによって異なります。歴史的に、IDとコントロールの名前を制御することはできませんでした。ASP.Net 4.0では、これが変更されました。IDのレンダリング方法を制御できます。代わりにこの機能を使用してみませんか?

.Net 4.0の新機能に関する記事は次のとおりです。http://www.dotnetfunda.com/articles/article893-control-over-client-ids--aspnet-40-.aspx

name属性をターゲットにしている理由はありますか?

古いバージョン(3.5)を使用している場合、これはそれほど簡単ではありません。FindControlは、名前ではなく、コントロールのIDのみを検索します。

于 2010-08-10T22:35:38.757 に答える
0

コントロールをプレースホルダーに配置し、フォームではなくプレースホルダーにそのコントロールを配置する必要があるようです。カスタムコントロールとダイナミックコントロールの削除と追加については、操作する前に最初にコントロールを見つける必要がある場合の以下の例を参照してください。完全な説明については、ブログにあります-> http://anyrest.wordpress.com/2010/04/06/dynamically-removing-controls-in-a-parent-page-from-a-child-control /。これで問題が解決したかどうか教えてください。

public UserControl myCustomControl = new UserControl();
public Button myDynamicButton = new Button();

protected void btnAddControl_Click(object sender, EventArgs e)
{
    myCustomControl = (UserControl)Page.LoadControl("SampleControlToLoad.ascx");
    PlaceHolder myPlaceHolder = (PlaceHolder)Page.FindControl("PlaceHolder1");

    myPlaceHolder.Controls.Add(myCustomControl);
}
protected void btnRemoveControl_Click(object sender, EventArgs e)
{
    PlaceHolder myPlaceHolder = (PlaceHolder)Page.FindControl("PlaceHolder1");
    if (myPlaceHolder.Controls.Contains(myCustomControl))
    {
        myPlaceHolder.Controls.Remove(myCustomControl);
        myDynamicButton.Dispose();
    }
}
于 2010-08-10T22:59:05.620 に答える