これは面白い小さな問題です。私はその理由がページオブジェクト/イベント生成のライフサイクルの背後にあると考えていますが、問題はどうやって解決するのでしょうか? Default.aspxのでLoadControl(ctr)を使用してUserControl.ascxをロードした場合、イベントは機能しません
は、いくつかの面白いのコントロールが存在するだけでなく、
<asp:PlaceHolder runat="server" id="phUserContent"></asp:PlaceHolder>
このプレースホルダは実行時まで空です。コードの背後には、場合によっては、UserControlをその中にロードしています。この
Control ctr = LoadControl("~/UserControl/Note.ascx");
phUserContent.Controls.Add(ctr);
枚このNote.ascxは、いくつかの興味深いコントロールとイベントを発生させ、最終的LinkButtonコントロールが含まれています。 LinkButtonコントロール・コードは、私がイベントのコードを持ってASCXための背後にあるコードで
<asp:LinkButton runat="server" ID="lbUpdate" OnClick="lbUpdate_Click" Text="Update"></asp:LinkButton>
、
protected void lbUpdate_Click(object sender, EventArgs e)
{ ... }
私はwrotedとして、非常に簡単かつ正確であるgramaticallyポストバックが発生すると、疑わしいページが再生成されますが、lbUpdate_Clickイベントは実行されません。もちろん、ブレークポイントが試されます。
私は2つの可能性のあるシナリオを探しています。 1つは、私が本当に簡単なことを忘れていたことです(間違ったコードのファイルに書き込まれたようなものです)。また、ページ生成サイクルの重要な部分を見逃していました。私は(私はちょうどここだと思う。)このように、主に第二によ
1ページ(ASCX)が、それはのGot
は 2. Submitを変更 3. ASCXが 4再生成されたクリックされました。イベントはクリアされましたが、存在していてエラーをキャストしませんでした。 5.リロード後、最初のコンテンツが再ロードされました
コンパイラがブレークポイントを認識できず、値が "空のイベントの実行"によって保存されなかったことが原因です。しかし、これはまさにアマチュアの推測です。アドバイスをお願いします。
[回答数ごとに更新] これは、私がそれを解決した方法です。これは以下の回答に基づいています。
List<Control> ctr;
public User()
{
ctr = new List<Control>();
}
protected void Page_PreInit(object sender, EventArgs e)
{
ctr.Add(LoadControl("~/UserControl/Note.ascx"));
}
protected void Page_Load(object sender, EventArgs e)
{
ctr.ForEach(d => phUserContent.Controls.Add(d));
}
はまもなく..
1.クラスは、Page_LoadのでUC(uはここではそれらのXを持つことができます)
3.(場所を追加(作成前)Page_PreInitのコントロール
2のリストを得ましたすべてのctrが作成されます)、各UCをPHに追加します。また
ご意見ありがとうございます。私はあなたのテキストに自分の問題を見つけるために少し考えなければなりませんでした。あなたの説明にソリューションを接続するのがより簡単になりました。そしてそれを見つけた。私はQで答えを更新します。 – Independent