いくつかのラベル、テキストボックス、そして最終的にはボタンなど、いくつかのコントロールを備えたwebusercontrolがあります。このコントロールの目的は、webusercontrolのボタンをクリックするたびに、プレースホルダーのメインページに追加することです。
これは、Webコントロールのボタンの背後にあるコードです
protected void btnCriteriaToevoegen_Click(object sender, EventArgs e)
{
//New eventhandler == all of the eventhandlers of all the objects who have subscribed to the event.
EventHandler eventhandler = ButtonDoorgaan;
ButtonOpslaanEvent mijnevent = new ButtonOpslaanEvent();
//Basic variables I will give with my costum event(ButtonOpslaanEvent)
mijnevent.Naam = txtCriteriumNaam.Text;
mijnevent.Score = Convert.ToInt16(DdlCriteriumScoreSchaal.SelectedValue);
int weging = Convert.ToInt16(DdlCriteriumWeging.SelectedValue) - 1;
mijnevent.Weging = Convert.ToInt16(weging);
//If the eventhandler is not null, for every object that has an eventhandler, execute it.
if(eventhandler!=null)
eventhandler(sender, mijnevent);
}
イベントが発生したときに実行する必要のあるイベントハンドラーは、メインページで次のように定義されています。
private void critlijn_ButtonDoorgaan(object sender, EventArgs e)
{
ButtonOpslaanEvent eigenevent = (ButtonOpslaanEvent)e;
IEnumerator<Domein> domeinenumerator = domeinen.GetEnumerator();
while (domeinenumerator.MoveNext())
{
if (domeinenumerator.Current.DomeinNaam.Equals(lijstdomeinitemgeselecteerd))
{
Criterium nieuwcriterium = new Criterium();
nieuwcriterium.CriteriumNaam = eigenevent.Naam;
nieuwcriterium.CriteriumScore = Convert.ToString(eigenevent.Score);
nieuwcriterium.CriteriumWeging = Convert.ToString(eigenevent.Weging);
domeinenumerator.Current.Criteriums.Add(nieuwcriterium);
}
}
btnCriteriaToevoegen_Click(sender, e);
}
btnCriteriaToevoegen_Clickイベントが発生し、このメソッド(addCriteriaButton())を呼び出します。これにより、メインページのプレースホルダーにボタンが追加されます。
private void addCriteriaButton()
{
Criterialijn criterialijn = (Criterialijn)LoadControl("~/Criterialijn.ascx");
//Add eventhandlers to control
criterialijn.ButtonDoorgaan += new EventHandler(critlijn_ButtonDoorgaan);
criterialijn.Aangevinkt += new EventHandler(critlijn_Aangevinkt);
//Every control on the page except this one, not enabled
IEnumerator<Criterialijn> criterialijnenumerator = criteriacontrols.GetEnumerator();
while (criterialijnenumerator.MoveNext())
{
criterialijnenumerator.Current.Enabled = false;
}
//Add it to a list of webusercontrols that are currently on screen
criteriacontrols.Add(criterialijn);
criterialijn.Enabled = true;
//Add to placeholder
plhCriteria.Controls.Add(criterialijn);
}
したがって、これがすべて完了し、プログラムを実行すると、彼は私のプレースホルダーにコントロールを追加しますが、ボタンをクリックしても、彼は私のプレースホルダーに新しいコントロールを追加せず、何らかの理由で私のプレースホルダーをクリアするだけです。通常はすべて問題ないはずですが、ボタンをクリックしたときに彼が実際にイベントを発生させるかどうかを確認しようとしましたが、発生しません。ページ全体のコードが非常に大きく、まったく役に立たないため、コードのサンプルを提供しようとしました。彼がボタンのイベントを起動しない理由はありますか?