CheckedChanged 事件不起作用
CheckedChanged event doesn't work
我做了这样的结构:
- Topic 1
- Topic A
- Topic α
- Topic β
- Topic B
- Topic γ
- Topic δ
- Topic 2
- Topic C
- Topic ε
- Topic ζ
- Topic D
- Topic η
- Topic θ
屏幕上首先出现主题 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
从未运行过。我放置了两个断点(参见代码中的●),但编译器总是在第一个断点处停止,而从不在第二个断点处停止。
一些图片可以更好地解释它:
第一个状态=开始状态:(只显示数字) ok
我查了其中一个号码
第二种状态:(只显示数字和字母) ok
我检查其中一个字母。
第三种状态:(数字、字母、罗马必须显示) 错误
编辑:2015 年 8 月 15 日
我还尝试在每次创建 Checkbox
时在 UpdatePanel
上添加一个触发器。
这是我用于它的代码(在上面的代码中代表//\
)。
updTopics.Triggers.Add(new AsyncPostBackTrigger()
{
ControlID = rbtNumber.ID, // or rbtLetter
EventName = "CheckedChanged"
});
但是删除罗马和字母总是一样的问题
编辑:2015 年 8 月 27 日
任何人 (在另一个社区) 告诉我有一个 page life cycle。现在我知道为什么这段代码不起作用了。但是我不知道怎么解决。
我知道这个问题太宽泛了,但是谁能帮助我或给我一些提示来解决我的问题?如果你的想法可行,我会测试它。我是 ASP.net.
的新手
感谢所有帮助,抱歉我的英语不好。
在您开发它的过程中,它永远行不通。 UpdatePanel
s 不能用于此目的。您可以使用的替代方法是用户控件。 UpdatePanel
可以在该控件中工作。
我做了这样的结构:
- Topic 1
- Topic A
- Topic α
- Topic β
- Topic B
- Topic γ
- Topic δ
- Topic 2
- Topic C
- Topic ε
- Topic ζ
- Topic D
- Topic η
- Topic θ
屏幕上首先出现主题 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
从未运行过。我放置了两个断点(参见代码中的●),但编译器总是在第一个断点处停止,而从不在第二个断点处停止。
一些图片可以更好地解释它:
第一个状态=开始状态:(只显示数字) ok
我查了其中一个号码
第二种状态:(只显示数字和字母) ok
我检查其中一个字母。
第三种状态:(数字、字母、罗马必须显示) 错误
编辑:2015 年 8 月 15 日
我还尝试在每次创建 Checkbox
时在 UpdatePanel
上添加一个触发器。
这是我用于它的代码(在上面的代码中代表//\
)。
updTopics.Triggers.Add(new AsyncPostBackTrigger()
{
ControlID = rbtNumber.ID, // or rbtLetter
EventName = "CheckedChanged"
});
但是删除罗马和字母总是一样的问题
编辑:2015 年 8 月 27 日
任何人 (在另一个社区) 告诉我有一个 page life cycle。现在我知道为什么这段代码不起作用了。但是我不知道怎么解决。
我知道这个问题太宽泛了,但是谁能帮助我或给我一些提示来解决我的问题?如果你的想法可行,我会测试它。我是 ASP.net.
的新手
感谢所有帮助,抱歉我的英语不好。
在您开发它的过程中,它永远行不通。 UpdatePanel
s 不能用于此目的。您可以使用的替代方法是用户控件。 UpdatePanel
可以在该控件中工作。