gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:52:41 26 4
gpt4 key购买 nike

我想从自定义 ASP.NET 用户控件中公开一个复杂的属性,这样就可以在aspx页面中的control标签中设置.

像这样的东西:

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 文件中:
<div>
<testns:TestControl runat="server" ID="TestControl1" TestProperty="X:1,Y:2"/>
</div>

最佳答案

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

要序列化控件属性中的对象,您必须定义适当的 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;
}
}

关于c# - 在 ASP.NET 用户控件中公开复杂属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com