我在我的頁面上有一個Label控件和自定義UserControl。我想要的是,當UserControl出現某些內容時,它就會改變,例如Label的Text屬性(正如我所提到的,Label不屬於UserControl)。怎麼做 ?ASP.NET如何通過自定義UserControl更改頁面控件?
2
A
回答
2
一個用戶控件應該是可重複使用,因此要正確地做到這一點,你應該使用一個事件從用戶控件的頁面鉤到,即:
public NewTextEventArgs : EventArgs
{
public NewTextEventArgs(string newText)
{
_newText = newText;
}
public NewText
{
get { return _newText; }
}
}
然後將下面的事件添加到您的用戶控件:
public event OnNewText NewText;
public delegate void OnNewText(object sender, NewTextEventArgs e);
然後火從用戶控件的事件:
private void NotifyNewText(string newText)
{
if (NewText != null)
{
NewText(this, new NewTextEventArgs(newText));
}
}
然後強制牛逼消耗你的網頁,事件和用戶控件和頁面不再緊密耦合:
然後處理該事件和文本設置爲您的標籤:
protected void YourControl1_NewText(object sender, NewTextEventArgs e)
{
Label1.Text = e.NewText;
}
2
你最好的選擇是使用某種事件來通知UserControl已更新的包含頁面。
public class MyControl : UserControl {
public event EventHandler SomethingHappened;
private void SomeFunc() {
if(x == y) {
//....
if(SomethingHappened != null)
SomethingHappened(this, EventArgs.Empty);
}
}
}
public class MyPage : Page {
protected void Page_Init(object sender, EventArgs e) {
myUserControl.SomethingHappened += myUserControl_SomethingHappened;
}
private void myUserControl_SomethingHappened(object sender, EventArgs e) {
// it's Business Time
}
}
這僅僅是一個基本的例子,但我個人建議使用設計器界面來指定用戶控件的事件處理程序,以便分配獲取你的設計師處理的後臺代碼,而不是一個你的工作英寸
+0
我認爲是這樣,但是如何在我的頁面上捕獲此事件? – Tony 2010-07-23 08:49:42
1
您可以通過從您的自定義UserControl中引發事件來點。然後攔截事件和頁面可以相應地修改標籤的Text屬性:
0
您可以使用頁面屬性來訪問頁面包含用戶控件的。請嘗試:
((Page1)this.Page).Label1.Text =「Label1 Text」;
相關問題
- 1. 爲ASP.NET頁面指定自定義資源文件/ usercontrol
- 2. ASP.NET從內容頁面更改masterpage usercontrol
- 3. ASP.NET在父頁面上獲取UserControl自定義事件VB
- 4. 在asp.net中如何引用自定義基頁面類中的頁面控件
- 5. 通過代碼更改自定義控件文本塊的值
- 6. Asp.Net中的事件Webforms自定義UserControl
- 7. 如何在選擇usercontrol時禁用ASP.NET頁面中的控件?
- 8. 如何從ASP.NET中的UserControl訪問父頁面控件?
- 9. asp.net添加自定義控件頁
- 10. 如何通過C#代碼更改自定義WPF控件中的BitmapEffect
- 11. 更改自定義404錯誤頁面
- 12. 如何將主頁更改爲Orchard中的自定義頁面
- 13. 自定義控件不是usercontrol
- 14. modalpopupextender asp.net usercontrol頁面
- 15. 使用ASP.NET自定義更改實體時頁面失效OutputCacheProvider
- 16. 頁面更改事件ASP.NET
- 17. PageViewController的自定義頁面控件
- 18. ASP.net Web窗體自定義控件自動更改下一個控件的ID
- 19. 如何從aspx頁面訪問userControl中的web控件頁面
- 20. 如何定義監控頁面內容更改的方法?
- 21. ASP.NET頁面與多個自定義控件實現IPostBackEventHandler
- 22. 將自定義UserControl中的控件綁定到外部控件
- 23. ASP.NET自定義控件XML
- 24. ASP.NET自定義控件
- 25. ASP.NET自定義控件 - DataBinding
- 26. ASP.NET自定義Web控件
- 27. ASP.Net自定義控件
- 28. ASP.NET Web自定義控件
- 29. ASP.net自定義GridView控件
- 30. Xamarin.iOS更改bordercolor爲自定義控件
@Nathan Taylor - 我刪除了最初的答案,並換成了更好的事件驅動的答案。 – GenericTypeTea 2010-07-23 08:55:30
好東西!只是一個快速提示,通用EventHandler不再需要爲您的自定義eventargs類創建委託。你可以簡單地做'公共事件EventHandler NotifyNewText;' –
2010-07-23 16:41:14
@Nathan - 謝謝。我不知道! – GenericTypeTea 2010-07-23 18:12:59