在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; } }