0

目前我正在开发一个 Asp.Net 应用程序。它有一个 Asp.Net Calendar 控件和 OnDayRender() 方法,我在其中动态添加 Checkbox 控件。我也附加了 CheckedChanged 事件处理程序。但是,每当我单击复选框时,它都不会调用服务器端 CheckedChanged() 方法。任何帮助将不胜感激。谢谢。

ASP.NET 代码:

     <div>  
         <asp:Calendar  
            ID="Calendar1"   
            runat="server"  
            NextPrevFormat="FullMonth"  
            ForeColor="WhiteSmoke"  
            SelectionMode="Day"  
            DayNameFormat="Full"  
            Font-Names="Book Antiqua"  
            Font-Size="Medium"  
            OnDayRender="Calendar1_DayRender">  
        </asp:Calendar>  
    </div>  

服务器端:

    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)  
    {  
            CheckBox checkBox1 = new CheckBox();  
            checkBox1.AutoPostBack = true;  
            checkBox1.Width = 25;  
            checkBox1.Enabled = false;  
            checkBox1.CheckedChanged = checkBox1_CheckedChanged;
            e.Cell.Controls.AddAt(1, checkBox1);  
            e.Cell.Font.Size = FontUnit.XLarge;  
    }  


    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        // Do some operation...
    }
4

1 回答 1

1

日历的DayRender事件正是它所说的——它是在渲染过程中触发的事件,就在给定日期的单元格被渲染之前。由于此事件在页面生命周期的后期触发,因此您无法添加触发事件的控件。

日历文档

“由于在呈现日历控件时会引发 DayRender 事件,因此您无法添加也可以引发事件的控件,例如 CheckBox。您只能添加静态控件,例如 LiteralControl、Label、Image 和 HyperLink。”

解决方法在这里

于 2013-05-27T09:41:41.117 回答