我创建了用户控件。它有string[]
公共财产(可能是List<string>
或其他)。我想支持在声明此usercontrol的实例时在aspx代码中定义此属性。像这样:
<uc1:MyControl ID="MyControl1" runat="server">
<MyStringCollectionProperty>
<string>My String 1</string>
<string>My String 2</string>
<string>My String 3</string>
</MyStringCollectionProperty>
</uc1:MyControl>
如何让它发挥作用?感谢...
答案 0 :(得分:6)
您实际上可以使用TypeConverterAttribute指定转换器类(在本例中为StringArrayConverter)。
答案 1 :(得分:1)
据我所知,您无法使用用户控件执行您想要执行的操作。您需要编写自定义控件。
请参阅MSDN上的Server Control Properties Example。
答案 2 :(得分:1)
以下是如何完成所要求的示例。子控件作为HTMLGeneric控件读入,因此您必须转换它们。在阅读它们时,我将它们转换为我的自定义“StringControl”类。如果你想使用更高级的结构,你可以只增强stringcontrol的构造函数。
Partial Class UserControlStrings_MyControl
Inherits System.Web.UI.UserControl
Private _MyStringCollectionProperty As New MyUserControlStringCollectionClass(Me)
<PersistenceMode(PersistenceMode.InnerProperty)>
Public ReadOnly Property MyStringCollectionProperty As MyUserControlStringCollectionClass
Get
Return _MyStringCollectionProperty
End Get
End Property
End Class
Public Class MyUserControlStringCollectionClass
Inherits ControlCollection
Sub New(ByVal owner As Control)
MyBase.New(owner)
End Sub
Public Overrides Sub Add(ByVal child As System.Web.UI.Control)
MyBase.Add(New StringControl(child))
End Sub
End Class
Public Class StringControl
Inherits HtmlGenericControl
Sub New(ByVal GenericControl As HtmlGenericControl)
MyBase.New()
Me.Value = GenericControl.InnerHtml
End Sub
Public Property Value As String = String.Empty
Public Overrides Function ToString() As String
Return Value
End Function
End Class
然后,您可以在“MyControl1.MyStringCollectionProperty”中查找所有值。
答案 3 :(得分:0)
通过明确地在标记中输入变量值,根据您的示例,您将直接将UI与逻辑相结合。
如果这些值没有改变,那么将它们加入标记是没有意义的 - 将它们放入用户控件的代码中会更好。
如果每次用户控件加载时这些值可能不同,那么它们应该来自动态源,例如会话状态变量,公共变量,控制值等。(在这种情况下,您的用户控件会看起来每次加载它们都会起作用。)
如果这些值仅在设计时更改,您仍然可以按上述方式设置它们,但在这种情况下您可能会考虑构建“自定义控件”。
无论如何,不确定你想要达到的目标,所以希望其中一个选项可以提供帮助。
祝你好运答案 4 :(得分:0)
您可以使用Collection和List。
一定要检查http://msdn.microsoft.com/en-us/library/9txe1d4x%28v=vs.100%29.aspx - 它非常适合用户控制,在上面的stackoverflow链接上我解释了如何在aspx页面或webconfig中链接