2017-05-30 30 views
2

我跟着其他一些問題嘗試解決此問題,但它們似乎不適用於我的案例。 This is an example從位於中繼器控件內的用戶控件調用父頁面中的方法

在我的情況下,用戶控件的一個實例在中繼器中多次加載,我懷疑這與我遇到的問題有關。

我使用此方法將事件附加到用戶控件的每個實例。

protected void rptPosts_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     DataRowView MyRow = (DataRowView)e.Item.DataItem; 
     Post MyPost = (Post)e.Item.FindControl("Post"); 

     MyPost.UserControlButtonClicked += new EventHandler(MyPost_UserControlButtonClicked); 

     MyPost.LoadPost(MyRow); 
    } 
    } 

    private void MyPost_UserControlButtonClicked(object sender, EventArgs e) 
    { 
    // reload repeater items 
    } 

裏面我後面的用戶控件的代碼把這個代碼:

public event EventHandler UserControlButtonClicked; 

    private void OnUserControlButtonClick() 
    { 
    if (UserControlButtonClicked != null) 
    { 
     UserControlButtonClicked(this, EventArgs.Empty); 
    } 
    } 

和用戶控件內的按鈕(也應該觸發頁面方法)我把這個:

protected void lnkDelete_Click(object sender, EventArgs e) 
    { 
    // Code to delete record // 

    OnUserControlButtonClick(); 
    } 

問題似乎是if (UserControlButtonClicked != null)似乎總是返回false,因此UserControlButtonClicked(this, EventArgs.Empty);永遠不會執行。

回答

1

您需要在OnItemCreated上掛起事件。另外,如果你發佈的頁面將會消失。所以,我希望它會是這個樣子:

protected void rptPosts_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Post MyPost = (Post)e.Item.FindControl("Post"); 
     MyPost.UserControlButtonClicked += new EventHandler(MyPost_UserControlButtonClicked); 
    } 
} 

然後在你的ItemDataBound並不真正需要掛鉤的事件了。所以它看起來像這樣:

protected void rptPosts_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     DataRowView MyRow = (DataRowView)e.Item.DataItem; 
     Post MyPost = (Post)e.Item.FindControl("Post"); 
     MyPost.LoadPost(MyRow); 
    } 
} 

在ItemDataBound中,您仍然需要加載帖子。我不會建議在ItemCreated中這樣做。因爲這意味着每次創建項目時都會加載這些帖子。這是不是你想要的

參考:

+0

它的工作原理!感謝您的及時回覆! – Osprey

+0

@Osprey:沒問題。樂意效勞 – Arion

相關問題