提问人:Ann 提问时间:10/19/2023 更新时间:10/20/2023 访问量:31
自定义控件 [Label], 如何添加属性
Customized Control [Label], how to add attribute
问:
我正在使用 html 的自定义控件,并为代码隐藏 vb.net。自定义控件 [Label] 没有 [FOR] 属性。现在,我必须添加 [Label] 控件的属性。请问该怎么做? P.S. 我不是做定制的人,它是以这种方式给我的。而且我根本不知道如何对控件进行自定义。 谢谢!
html格式:
<custom:custom_label runat="server" id="lblAgreement">
代码隐藏:
lblAgreement.Attributes.Add("For", ???)
答:
方法是在公共方法(getter/setter)后面的代码中简单地创建,从而返回或针对该用户控件中的控件设置所需的值或属性。
因此,假设我有一个带有标签的用户控件和一个文本框。
所以,我的标记是这样的:
<asp:Label ID="Lbl1" runat="server" Text=""
For="" >
</asp:Label>
<br />
<asp:TextBox ID="txt1" runat="server">
</asp:TextBox>
那么,现在设置文本框、标签文本值或标签 For 值的用户控件代码是什么样子的呢?
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Public Property Text As String
Get
Return Me.txt1.Text
End Get
Set(value As String)
Me.txt1.Text = value
End Set
End Property
Public Property LableText As String
Get
Return Me.Lbl1.Text
End Get
Set(value As String)
Me.Lbl1.Text = value
End Set
End Property
Public Property ForV As String
Get
Return Me.Lbl1.Attributes("For").ToString
End Get
Set(value As String)
Me.Lbl1.Attributes.Add("For", value)
End Set
End Property
现在,作为 vb.net 的习惯,在大多数情况下,我只会使用给定类的公共变量,而不会在代码中打扰get/set对。在 99% 的用例中,您不需要浪费时间编写 get/set,而只需拥有类的公共成员即可。
因此:
Public FirstName as string
然而,这是一个很大的问题,但是,上面的一个例外是在 vb 中构建用户控件时。是否希望上述值在标记中工作,甚至显示在属性表中?
然后,您要使用公共属性,并为该属性使用 get/set。
执行上述操作会在用户控件放入标准 Web 窗体页面时生成一个非常漂亮的属性表。
然后,可以使用属性表来设置用户控件的值,也可以在标记中键入值,甚至可以使用智能感知来帮助您。
因此:
因此,请注意如何为此自定义控件使用标记或属性表。(当然,任何具有 get/set 的公共属性都会显示在属性表中)。
如果要公开控件属性(如文本),请创建一个公共 get/set,用于设置给定控件的值。因此,在上面,我想要文本框的公共文本设置,因此:
Public Property Text As String
Get
Return Me.txt1.Text
End Get
Set(value As String)
Me.txt1.Text = value
End Set
End Property
所以,在代码后面,我可以去
MyUserControl.Text = "Hello"
上面会设置文本框的 txt 值。
您还可以将标记与上述内容一起使用,再次标记将起作用,并设置相关控件的值。
因此,只需为要向网页公开的该用户控件中的控件的属性创建用户控件的公共方法即可。
最后但同样重要的?
关键字“For”在 VB 中看起来是一个保留字,因此我使用了 ForV。
我怀疑问题不是在代码中设置 For 属性,而是实际上将值设置为同一用户控件中存在的其他控件。
您的问题没有询问此问题和挑战。由于给定控件的多个副本可以在给定的 Web 窗体页中自由使用,那么如果 For 属性指向同一用户控件内的文本框?
然后,我建议使用以下代码将 For 属性设置为文本框的当前生成的客户端 ID:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.ForV = Me.txt1.ClientID
End Sub
请注意,asp.net 标签控件呈现为 span 元素,因此实际上实际上没有有效的“For”标记标记。
这确实表明,如果需要由用户控件呈现 HTML 标签元素,则需要使用带有 runat=“server” 的 HTML 标签标记和 id 标记。使用 asp.net 标签元素会导致输出呈现为 span 元素,而不是有效的标签元素(无论如何都没有 For 标记)。
评论