簡體   English   中英

CheckedChanged事件不起作用

[英]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永遠不會運行。 我放置了兩個斷點(請參見代碼中的●),但是編譯器始終在第一個斷點處停止,而從不停在第二個斷點處。

一些圖片可以更好地解釋它:

  1. 第一狀態=起始狀態:( 僅顯示數字)

    在此處輸入圖片說明

    我檢查了其中一個數字。

  2. 第二種狀態:( 僅顯示數字和字母) 確定

    在此處輸入圖片說明

    我檢查了一封信。

  3. 第三狀態:( 必須顯示數字,字母和羅馬) 錯誤

    在此處輸入圖片說明


編輯: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM