[英]CheckedChanged event doesn't work
我有一個這樣的結構:
- 主題1
- 話題A
- 主題α
- 話題β
- 話題B
- 主題γ
- 話題δ
- 主題二
- 主題C
- 話題ε
- 話題ζ
- 主題D
- 主題η
- 話題θ
首先是屏幕上的主題1和2。 通過檢查其中之一,主題A和B或C和D出現在屏幕上。 最后根據選擇的字母在屏幕上顯示α直到θ。 我使用以下代碼執行此操作:
ASP.NET
<asp:ScriptManager EnablePartialRendering="true" runat="server" />
<div>
<asp:UpdatePanel ID="updPnlTopics" UpdateMode="Always" runat="server">
<ContentTemplate>
<asp:Panel ID="pnlNumbers" CssClass="topics" runat="server" />
<asp:Panel ID="pnlLetters" CssClass="topics" runat="server" />
<asp:Panel ID="pnlRoman" CssClass="topics" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
C#
private List<TopicNumbers> _allTopics;
private TopicNumber _topicNumber;
protected async void Page_Load(object sender, EventArgs e)
{
await LoadTopics();
}
private async Task LoadTopics()
{
_allTopics = await GetAllTopics(); //this gets all topics from database
foreach (TopicNumber number in _allTopics)
{
MakeRadioButton<TopicNumber>(number, pnlNumbers, new EventHandler(rbtNumber_CheckedChanged));
}
}
private void rbtNumber_CheckedChanged(object sender, EventArgs e)
{
RadioButton rbt = (RadioButton)sender; // 1 ● --> stop always
pnlLetters.Controls.Clear();
pnlRomain.Controls.Clear();
if (rbt.Checked)
{
_topicNumber = (from number in _allTopics
where number.Naam == rbt.Text
select number).First<TopicNumber>();
foreach (TopicLetter letter in _topicNumber.Letters) //Letters contains a list with all the letters for that number
{
MakeRadioButton<TopicLetter>(letter, pnlLetters, new EventHandler(rbtLetter_CheckedChanged));
}
}
}
public void rbtLetter_CheckedChanged(object sender, EventArgs e)
{
RadioButton rbt = (RadioButton)sender; // 2 ● --> don't stop
pnlRoman.Controls.Clear();
if (rbt.Checked)
{
TopicLetters letter = (from letter in _topicNumber.Letters
where letter.Naam == rbt.Text
select letter).First<TopicLetters>();
foreach (TopicRomain romain in letter.Romans) //contains a list with all roman letters for that western letter
{
RadioButton rbtRoman = new RadioButton() {
Text = roman.ToString(),
GroupName = "roman",
AutoPostBack = true
};
pnlRoman.Controls.Add(rbtRoman);
pnlRoman.Controls.Add(new Literal() {
Text = "<br/>"
});
}
}
}
private void MakeRadioButton<T>(T type, Panel pnl, EventHandler evt)
{
RadioButton rbt = new RadioButton() {
Text = type.ToString(),
GroupName = pnl.ID,
ID = type.ToString(),
AutoPostBack = true,
CssClass = "topic"
};
rbt.CheckedChanged += evt;
//\\
updPnlCategorieen.Triggers.Add(new AsyncPostBackTrigger() {
ControlID = rbt.ID,
EventName = "CheckedChanged"
});
pnl.Controls.Add(rbt);
pnl.Controls.Add(new Literal() {
Text = "<br/>"
});
}
現在我的問題是何時顯示羅馬字母。 我的代碼看起來不錯(想想我),但是rbtLetter_CheckedChanged
永遠不會運行。 我放置了兩個斷點(請參見代碼中的●),但是編譯器始終在第一個斷點處停止,而從不停在第二個斷點處。
一些圖片可以更好地解釋它:
編輯:2015年8月15日
每當嘗試創建Checkbox
我也嘗試在UpdatePanel
上添加觸發器。
這是我使用的代碼(在上面的代碼中//\\\\
站立) 。
updTopics.Triggers.Add(new AsyncPostBackTrigger()
{
ControlID = rbtNumber.ID, // or rbtLetter
EventName = "CheckedChanged"
});
但是,刪除羅馬字母和字母始終是相同的問題。
編輯:2015年8月27日
任何人(在另一個社區中)都說我有一個頁面生命周期 。 現在我知道為什么此代碼無法正常工作了。 但是我不知道該怎么解決。
我知道這個問題過於籠統,但是有人可以幫助我或給我提示我的問題嗎? 如果您的想法可行,我會進行測試。 我對ASP.net真的很陌生。
感謝所有幫助,對不起我的英語不好。
在開發過程中,它永遠都行不通。 UpdatePanel
不能用於此目的。 您可以使用的替代方法是用戶控件。 並在該控件中可以運行UpdatePanel
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.