【问题标题】:How to achieve embedded custom tags in asp.net?如何在asp.net中实现嵌入自定义标签?
【发布时间】:2011-09-23 10:25:20
【问题描述】:

我找到了这个例子:

<telerik:RadDatePicker
 ID="RadDatePicker1"
 runat="server">
 <DateInput Width="100%"></DateInput>
 <Calendar
     CellAlign="Center"
     CellVAlign="Middle"
     DayNameFormat="FirstLetter"
     FirstDayOfWeek="Default"
     MonthLayout="Layout_7columns_x_6rows"
     Orientation="RenderInRows"
     TitleAlign="Center"
     UseColumnHeadersAsSelectors="False"
     ShowRowHeaders="False">
</Calendar>
<DatePopupButton 
     CssClass="radPopupImage_Default" 
     BorderColor="#D0E1F2" 
     BorderStyle="Solid" 
     BorderWidth="1px" />

我的假设是在 RadDatePicker 内部有一个 DateInput 对象、Calendar 对象和 DatePopupButton 对象。

我想拥有自己的自定义控件,允许访问内部对象,例如

    <jonno:textbox id="txt1" runat="server"><FieldConfig fieldName="Input1"/></jonno:textbox>

理想情况下,我不希望 FieldConfig 类成为可视类,但如果是的话也没关系。

我怎样才能做到这一点?

【问题讨论】:

    标签: asp.net vb.net user-controls custom-controls


    【解决方案1】:

    嵌入的自定义标签是控件的属性。要启用在标记中设置它们,您需要使用以下属性装饰您的控件和属性:

    • 控制:ParseChilden、PersistChildren
    • 属性:PersistenceMode

    来自我使用的执行类似操作的控件的示例:

    /// <summary>
    /// Control that will conditionally show one of two views
    /// </summary>
    [ParseChildren(true)]
    [PersistChildren(true)]
    public class EditingView : CompositeControl
    {
        #region private fields
    
        private View _displayView = new View();
        private View _editView = new View();
    
        #endregion
        #region properties
    
        /// <summary>
        /// The view that will be rendered in display mode
        /// </summary>
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public View DisplayView
        {
            get
            {
                return _displayView;
            }
            set
            {
                _displayView = value;
            }
        }
    
        /// <summary>
        /// The view that will be rendered in editing mode
        /// </summary>
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public View EditView
        {
            get
            {
                return _editView;
            }
            set
            {
                _editView = value;
            }
        }
        /* Implementation details hidden */
    }
    

    在 msdn 上查找属性以了解它们的确切作用。上面应该做你需要它做的事情。 在标记中,我可以简单地分配两个视图:

    <ctl:EditingView runat="server">
    <DisplayView>
        blah blah
    </DisplayView>
    <EditView>
        blah blah edit
    </EditView>
    </ctl:EditingView>
    

    唯一的区别是我的属性仍然是 WebControls 并带有更多的子控件。不过没关系,只要您正确设置属性即可。

    门诺

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2016-10-06
      相关资源
      最近更新 更多