Извините за ответ на мой собственный вопрос, но я нашел несколько способов сделать это, и я подумал, что они могут быть полезны и для кого-то еще :)
Чтобы сериализовать объект в атрибуте элемента управления, вы должны определить соответствующий TypeConverter
и применить TypeConverterAttribute
к типу свойства. Вот пример: Как: реализовать преобразователь типов .
Еще проще, вы можете сохранить атрибут в контенте элемента управления так:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wbctrlstst._Default" %>
<%@ Register TagPrefix="x" TagName="TestControl" Src="~/TestControl.ascx" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<form id="form1" runat="server">
<div>
<x:TestControl runat="server" ID="testlist1">
<TestProperty X="1" Y="42" />
</x:TestControl>
</div>
</form>
</body>
</html>
Единственное требование, которое я видел, это то, что тип должен иметь конструктор по умолчанию. Вы можете применить PersistenceModeAttribute
к свойству, чтобы указать, что свойство должно сохраняться в содержимом элементов управления, но похоже, что это поведение по умолчанию, и это не является строго обязательным.
[PersistenceMode(PersistenceMode.InnerProperty)]
public TestData TestProperty {
get {
return ViewState["TestProperty"] as TestData;
}
set {
ViewState["TestProperty"] = value;
}
}