很抱歉回答了我自己的问题,但我发现了几种方法,我认为它们也可能对其他人有用:)
要序列化控件属性中的对象,必须定义适当的
TypeConverter
并应用
TypeConverterAttribute
属性类型。下面是一个例子:
How to: Implement a Type Converter
.
更简单的是,您可以像这样在控件的内容中保留属性:
<%@ 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;
}
}