【问题标题】:CheckedChanged event doesn't workCheckedChanged 事件不起作用
【发布时间】:2015-11-08 00:10:13
【问题描述】:

我做了一个这样的结构:

  • 主题1
    • 主题A
      • 主题α
      • 主题β
    • 主题B
      • 主题γ
      • 主题δ
  • 主题2
    • 主题 C
      • 主题ε
      • 主题ζ
    • 主题 D
      • 主题 η
      • 主题θ

首先是屏幕上的主题 1 和 2。通过检查其中一个主题 A 和 B 或 C 和 D 出现在屏幕上。最后根据所选字母在屏幕上 coms α 直到 θ。我使用以下代码执行此操作:

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 永远不会运行。我已经放置了两个断点(参见代码中的 ●),但编译器总是在第一个处停止,而从不在第二个处停止。

一些图片可以更好地解释它:

  1. 第一个状态 = 开始状态:(只显示数字) ok

    我检查了其中一个数字。

  2. 第二种状态:(只显示数字和字母) ok

    我检查了其中一个字母。

  3. 第三种状态:(必须显示数字、字母和罗马字) 错误


编辑: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 的新手。
感谢您的所有帮助,并为我糟糕的英语感到抱歉。

【问题讨论】:

  • 编译器是否在rbtNumber.CheckedChanged += rbtNumber_CheckedChanged;停止?
  • @DangerZone:是的,他停下来

标签: c# asp.net ajax radio-button updatepanel


【解决方案1】:

在你开发它的过程中,它永远不会起作用。 UpdatePanels 不能用于此。您可以使用的替代方法是用户控件。并进入该控件可以UpdatePanels 工作。

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    相关资源
    最近更新 更多