簡體   English   中英

UserControl的行為類似於asp.net中的面板

[英]UserControl to behave like a panel in asp.net

我有幾個自定義用戶控件(超過100個),都涉及一種通用格式,這基本上需要我們將用戶控件包裝在目標頁面上的面板控件中。 為簡單起見,我想創建一個處理此問題的基本控件,因為幾乎所有基本功能對於每個自定義控件都是相同的。

為此,我要做的是創建一個基類,在該基類內創建一個私有面板控件,然后重寫Render以在base.Render周圍生成面板前/后標簽。

現在,這非常有用,因為我們關心的所有用戶控件都繼承了此控件,而我們已經向繼承的控件公開的少數格式化項可以按預期工作(Width,CssClass等)。

我真正想要的是通過基類將所有面板控件項公開給繼承的控件,而不必修改屬性/方法來公開每個元素。

關於什么是最佳方法的任何想法? 我只是不想手動實現每個面板屬性/方法。 我們也使用設計時間屬性(第一個是CssClass和Width),但我們一直在吸引設計時間屬性的用戶...

我們所擁有的只是尋找更簡單/更好的解決方案。

using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public class BaseUserControl : System.Web.UI.UserControl
{
    private Panel _panel;
    private bool _isPanelLoaded;

    public Panel Panel
    {
        get
        {
            if (_panel == null)
            {
                _panel = new Panel();
                _isPanelLoaded = true;
            }
            return _panel;
        }
    }

    public BaseUserControl()
    {

    }

    protected override void Render(HtmlTextWriter writer)
    {
        if (_isPanelLoaded)
        {
            Panel.RenderBeginTag(writer);
            base.Render(writer);
            Panel.RenderEndTag(writer);
        }
        else
        {
            base.Render(writer);
        }
    }

    public Unit Width
    {
        get
        {
            if (Panel.Width.IsEmpty)
            {
                return 0;
            }
            return Panel.Width;
        }
        set
        {
            Panel.Width = value;
        }
    }

    public string CssClass
    {
        get
        {
            return Panel.CssClass;
        }
        set
        {
            Panel.CssClass = value;
        }
    }
}

為了公開所有屬性,您必須從Panel控件繼承。 由於具有面板屬性,因此可以在該屬性上設置屬性。 要在標記中定義它們是一個挑戰...對於大多數簡單對象,如果為屬性賦予<PersistenceMode(PersistenceMode.Attribute)>屬性,則可以訪問Panel-CssClass的語法中的屬性,但是我不知道這對您是否有用,因為Panel是一個控件。 很好嘗試。

實質上,您是在談論編寫包含所需屬性的屬性,因此,如果前一種解決方案不起作用,則最好這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM