2

テキストボックスをplacedHolderに動的に追加するという問題に直面していました。

プレースホルダー宣言:

<asp:PlaceHolder ID="phTextBoxes" runat="server" >
  </asp:PlaceHolder>

テキストボックスの割り当て

 ...if (phTextBoxes!= null) phTextBoxes.Controls.Add(txt);

しかし、アプリケーションをビルドするとエラーが発生しました

「phTextBoxes」という名前は現在のコンテキストには存在しません。以下のようにFindControl() を使用して問題を解決しました。

PlaceHolder phtxt = (PlaceHolder)form1.FindControl("phTextBoxes");

次にphtxtにコントロールを追加しました。エラーはなくなりました。しかし、古いプレースホルダーがエラーを出した理由と、FindControl がそれを見つけた方法を知りたいです。

4

1 に答える 1

0

@GrahamClarkが前に述べたように、何かが足りない可能性があります。GridViewなどの別のコントロール内にない限り、コードビハインドでphTextBoxを表示しない方法はありません。プレースホルダーが他のコントロール内にないことを確認してください。

もう1つ、Designerウィンドウ(aspxまたはascxファイル)の上部で、CodeBehind / * CodeFile *で関連するクラス名を参照していることを確認し、必要に応じて継承します。

例1:UC1というユーザーコントロールがあります。ascxファイルで、クラス名を次のように宣言する必要があります。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Cart.ascx.cs"
 Inherits="UserControls_UC1" %>

例2: DefaultというASPXページがあります。aspxファイルで、クラス名を次のように宣言する必要があります。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
 Inherits="_Default" %>
于 2012-04-05T11:32:21.860 に答える