【问题标题】:Update a user control public property on linkbutton click在链接按钮单击时更新用户控件公共属性
【发布时间】:2011-02-04 09:18:51
【问题描述】:

我创建了一个非常简单的日历用户控件,其中包含一个公共属性,用于定义要显示的月份/年份。我的日历控件放置在另一个 ascx 控件(本质上是包装器控件)中,其中包括用于一次向前和向后切换日历控件一个月的 LinkBut​​ton 控件。如果我在设计时在包装控件中明确定义日历控件的 SelectedDateTime 属性,则日历控件将显示正确的月份/年份。但是,当我尝试在运行时使用上一个和下一个 LinkBut​​ton 控件上的 Click 事件设置属性值时,日历控件永远不会选择我尝试分配给它的新 SelectedDateTime 值。

当我在调试模式下运行代码时,LinkBut​​ton 的 Click 事件总是最后发生 - 在日历控件的 SelectedDateTime 属性的值已设置为默认值并呈现之后。我错过了什么?

日历控件就像任何旧控件一样放置在包装控件中:

<wsba:CalendarBase ID="CalendarControl" runat="server" />

我创建了一个 LinkBut​​ton 控件来选择“下个月”,其对应的 Click 事件处理程序如下所示:

    protected void NextMonthLink_Click(object sender, EventArgs e)
    {
        CalendarControl.SelectedDateTime = CalendarControl.SelectedDateTime.AddMonths(1);            
    }

这是日历控件本身的核心:

    public partial class CalendarBase : System.Web.UI.UserControl
{
    public DateTime SelectedDateTime { get; set; }
    public List<Item> SelectedCalendars { get; set; }

    public CalendarBase()
    {
        // default SelectedDateTime to Now if no value was set
        if (SelectedDateTime.Year.Equals(1)) { SelectedDateTime = DateTime.Now; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // grab the month and year from the selectedDateTime
        int selectedMonth = SelectedDateTime.Month;
        int selectedYear = SelectedDateTime.Year;
        ... Do the rest of the stuff to render my control ...
    }

【问题讨论】:

    标签: asp.net user-controls page-lifecycle event-handling


    【解决方案1】:

    我可能在这里遗漏了一些东西,但是如果您的日历用户控件依赖公共属性来更改其输出。您应该在 Page_Load 事件之后的事件中呈现控件。这将确保在对其属性进行任何设置之后进行渲染。

    您可以/应该将日历控件代码从 Page_Load 移动到 Page_PreRender 事件。这样,它总是会在其他服务器事件触发并且属性更改后呈现。

    MSDN Page Lifecycle page

    【讨论】:

    • 好建议 - 谢谢!我绝对认为你在这里有所作为。我会试一试并发布我的结果。
    • 我将日历控件的渲染代码移到了Page_PreRender,如果单击“下个月”按钮一次,效果很好。但是,任何进一步的单击都会导致日历控件恢复为默认的 SelectedDateTime 属性值!为什么之前设置的控件的属性在回发之间不会持续存在?
    • Ahhh - 需要设置的用户控件的属性(即非只读字段)必须通过 ViewState 进行。这是有道理的,并解释了为什么该值仅设置为单击一次。 Walkthrough: Creating Reusable Elements with ASP.NET User Controls
    猜你喜欢
    • 2013-01-22
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多