控件屬性如何在 ASPX 標籤中持久化,由 PersistenceModeAttribute 決定四種模式;DesignerSerializationVisibility 控制屬性是否被設計器序列化。
| 模式 | ASPX 形式 | 適用屬性 | 範例 |
|---|---|---|---|
| Attribute (預設) | <ctrl Prop="val" /> | 簡單型別 | Width, Enabled |
| EncodedInnerDefaultProperty | <ctrl>文字內容</ctrl> (HTML 編碼) | 單一字串屬性 | ListItem.Text |
| InnerDefaultProperty | <ctrl>內含 HTML/控件</ctrl> | 允許標籤的字串 | DropDownList.Items (預設) |
| InnerProperty | <ctrl><Prop>...</Prop></ctrl> | 複雜物件、集合 | DropDownList.Items (明確) |
< 輸出為 <,不允許巢狀控件標籤[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string InternalCacheKey { get; set; }
Hidden:不序列化至 ASPX、不顯示於 PropertyGridContent:序列化物件內容(適用集合/複雜物件)Visible:預設,完整序列化[PersistenceMode(PersistenceMode.InnerProperty)]
[DefaultProperty("Items")]
public ListItemCollection Items { get; }
同時支援:
<asp:DropDownList>
<asp:ListItem Value="1">項目一</asp:ListItem> <!-- InnerProperty -->
</asp:DropDownList>
<asp:DropDownList Items="項目一,項目二" /> <!-- Attribute (需 TypeConverter) -->