私は.NETの初心者で、昨日の朝から検索して解決策を見つけることなく問題を解決します。ここでASPXとASCXの間のイベント
は私の問題です:
私はいくつかのユーザーコントロールは、私がパラメータ与える必要があるため、この方法によって動的に作成します。このASCXで
List<ANNOUNCEMENT> listAnnouncement = getAnnoucements();
foreach(ANNOUNCEMENT ann in listAnnouncement)
{
if(ann.IS_CURRENT_ANNOUNCEMENT && currentAnnouncement == null)
{
currentAnnouncement = ann;
}
List<Object> listParams = new List<Object>();
listParams.Add(ann);
AnnouncementPresentation ap = (AnnouncementPresentation)(Controller.LoadControl(Page, "~/UserControls/AnnouncementPresentation.ascx", listParams.ToArray()));
/* important for the end of the method */
ap.modifyAnnouncementButtonClick += new EventHandler(modifyAnnouncementButtonClick);
pnl_announcements.Controls.Add(ap);
}
を、私はボタンがあり、ときに、ユーザーがしますそれをクリックし、私は私のASPXに含まれるメソッドを呼び出すようにしたいので、私はASCXでこれを行う:ASPXで
public event EventHandler modifyAnnouncementButtonClick;
protected void btn_modify_announcement_Click(object sender, EventArgs e)
{
PageAdminAnnonces.currentAnnouncement = annonce;
modifyAnnouncementButtonClick(sender, e);
}
そして、この:
protected void modifyAnnouncementButtonClick(object sender, EventArgs e)
{
initListOfAnnouncement();
lbl_errors.Text = currentAnnouncement.TITLE;
}
私はすべてがうまくいっていると思っていますが、問題があります。一度は動作し、メソッドの最後に、ASCXを削除して新しいASCXを作成します。しかし、彼らはメソッドを持っていないし、もう一度クリックすると何も動作しないので、ASPXがリロードされます。再読み込み後、再び動作します。
私は何か問題がありますか?
あなたが少し遅れページのライフサイクルである 'initListOfAnnouncement'方法、で動的に作成されたコントロールを追加しているようです。 'Page_Init'または' Page_Load'メソッドの中に必要なコントロールをすべて追加することをお勧めします。 –
Page_Loadにこれらのコントロールを追加しています。私のメソッドinitListOfAnnouncement()はPage_Loadで呼び出されます。問題は、クリックしたときにユーザーコントロールを変更する必要があります(たとえば、太字のテキストを貼り付けるなど)。すべてのページを読み込まないでください。これを行うと、すべてのパラメータが失われるためですUserControlを太字で表示する必要があります。私の説明が十分明確であるかどうかはわかりません。 – algelos
私はまだ 'Page_Load'でコントロールを作成し、クリック処理イベントでそれらを削除/再作成するのではなく、そこにある既存のコントロールのプロパティを設定することをお勧めします**。 'Page_Load'にいくつかの追加パラメータが必要な場合は、' Button.PostBackUrl'プロパティを使ってクエリ文字列に渡すことで、ページにいくつかの追加パラメータを渡すことができると思います。 –