在ASP.NET用户控件中公开复杂属性

我想从自定义ASP.NET用户控件中公开一个复杂属性,以便可以从aspx页面中的控件标记设置它

像这样的东西:

public class TestData { public int X; public int Y; } public partial class TestControl : System.Web.UI.UserControl { public TestData TestProperty { get { return ViewState["TestProperty"] as TestData; } set { ViewState["TestProperty"] = value; } } } 

然后在包含控件的页面的.aspx文件中,我希望有类似的内容:

 

很抱歉回答我自己的问题,但我发现了几种方法,我认为它们对其他人也有用:)

要序列化控件属性中的对象,必须定义适当的TypeConverter ,并将TypeConverterAttribute应用于属性类型。 下面是一个示例: 如何:实现类型转换器 。

更简单的是,您可以将属性保存在控件的内容中,如下所示:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wbctrlstst._Default" %> <%@ Register TagPrefix="x" TagName="TestControl" Src="~/TestControl.ascx" %>   

我能看到的唯一要求是该类型必须具有默认构造函数。 您可以将PersistenceModeAttribute应用于属性以指定该属性应该保留在控件的内容中,但它看起来像是默认行为,并且这不是严格需要的。

 [PersistenceMode(PersistenceMode.InnerProperty)] public TestData TestProperty { get { return ViewState["TestProperty"] as TestData; } set { ViewState["TestProperty"] = value; } }