わかりましたので、これは最良の答えではないかもしれませんが、UpdatePanel が子コントロールのイベントを表示できないという問題があると思います。良いニュースは、簡単に修正できることです。コントロール (CatchMyEvent、ちなみに非常に巧妙な名前です) があり、その上に DropDownList があるとします。ここで、親ページで SelectedIndexChanged イベントがそのリストで発生するのを確認し、SelectedItem.Text に一致するようにラベルを更新する必要があります。このままでは、親は本当にそれをすることはできません。それでは、次のように変更しましょう。
public partial class CatchMyEvent : System.Web.UI.UserControl
{
public delegate void ChangedIndex(object sender, EventArgs e);
public event ChangedIndex SelectedIndexChanged;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
dropDownListThrow.SelectedIndexChanged += new EventHandler(dropDownListThrow_SelectedIndexChanged);
labelOutput.Text = "no";
}
public void dropDownListThrow_SelectedIndexChanged(object sender, EventArgs e)
{
labelOutput.Text = ((DropDownList)sender).SelectedItem.Text;
if(SelectedIndexChanged != null)
{
SelectedIndexChanged(sender, e);
}
}
}
基本的に私がしたことは、コントロールに DropDownList の SelectedIndexChanged イベントをキャプチャさせ、それを発生させて、親ページまたはコントロールがそれを見ることができるようにすることだけでした。基本的に、私が行ったすべてのことは、それを渡すことです。親ページでは、非常に簡単にキャプチャできます。
以下を保持するトリガーを使用して UpdatePanel を追加するだけです。
<asp:AsyncPostBackTrigger ControlID="catchMyEventMain" EventName="SelectedIndexChanged" />
...そしてもちろん、これを親ページのコード ビハインドに追加します。
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
catchMyEventMain.SelectedIndexChanged += dropDownListThrow_SelectedIndexChanged;
}
public void dropDownListThrow_SelectedIndexChanged(object sender, EventArgs e)
{
labelSelectedValue.Text = ((DropDownList)sender).SelectedItem.Text;
}
ラベルは前述のラベルです。そして、魔法を起こしましょう。
また、2 つの注意事項:
1) これをテストしたときのように馬鹿にしないでください。DropDownList の AutoPostBack プロパティを true に設定するのを忘れてください。
2) ラベルが UpdatePanel の ContentTemplate にあることを確認します。
お役に立てれば。