0

好的,所以我有一个页面上有一个列表视图。列表视图的项目模板内部是一个用户控件。此用户控件正在尝试触发一个事件,以便托管页面可以收听它。我的问题是事件没有被触发,因为处理程序为空。(即 EditDateRateSelected 是我的处理程序,调试时它为空)

   protected void lnkEditDate_Click(object sender, EventArgs e)
    {
            if (EditDateRateSelected != null)
            EditDateRateSelected(Convert.ToDateTime(((LinkButton)frmViewRatesDate.Row.FindControl("lnkEditDate")).Text)); 
    }

在我的 listvew 的项目数据绑定上是我添加事件处理程序的地方

protected void PropertyAccommodationRates1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        UserControls_RatesEditDate RatesViewDate1 = (UserControls_RatesEditDate)e.Item.FindControl("RatesViewDate1");
        RatesViewDate1.EditDateRateSelected += new UserControls_RatesEditDate.EditDateRateEventHandler(RatesEditDate1_EditDateRateSelected);

        RatesViewDate1.PropertyID = (int)Master.PropertyId;
        if (!String.IsNullOrEmpty(Accommodations1.SelectedValue))
        {
            RatesViewDate1.AccommodationTypeID = Convert.ToInt32(Accommodations1.SelectedValue);
        }
        else
        {
            RatesViewDate1.AccommodationTypeID = 0;
        }

        RatesViewDate1.Rate = (PropertyCMSRate)((ListViewDataItem)e.Item).DataItem;
    }
}

如果控件在页面内并且在页面加载时我有以下行,我的事件代码一切正常:

RatesEditDate1.EditDateRateSelected += new UserControls_RatesEditDate.EditDateRateEventHandler(RatesEditDate1_EditDateRateSelected);

但显然我需要监听 listviewcontrols 中的事件。

任何建议将不胜感激。我已经尝试将我的列表视图的 EnableViewState 设置为 true,但这并没有什么不同。我应该在其他地方连接控制处理程序吗?

注意 - 抱歉,如果我的术语有误,我将代表称为处理程序等:)

4

1 回答 1

0

好的,我尝试将事件连接到源中的用户控件,如下所示:

<uc1:RatesEditDate ID="RatesViewDate1" runat="server" OnEditDateRateSelected="RatesEditDate1_EditDateRateSelected" /> 

然后发现它抱怨由于其保护级别而无法访问。虽然在我的用户控件中 - 我已经公开了我的委托和事件???

public delegate void EditDateRateEventHandler(DateTime theDateTime); 
public event EditDateRateEventHandler EditDateRateSelected; 

事实证明,在我的托管页面中 - 我的事件处理程序上没有定义可访问性(所以是私有的) - 所以它需要受到保护,嘿 presto 很高兴!

问题解决了!

于 2010-06-04T04:36:35.130 回答