Asp.net 查找和循环标签
正在运行VS 2013 VB.net 我的aspx页面上有3个标签,分别为label1、label2和label3 我想循环遍历代码中的每一个,并为它们赋值 这是我的密码Asp.net 查找和循环标签,asp.net,vb.net,Asp.net,Vb.net,正在运行VS 2013 VB.net 我的aspx页面上有3个标签,分别为label1、label2和label3 我想循环遍历代码中的每一个,并为它们赋值 这是我的密码 Dim X As Integer = 1 For Each obj In values Dim myLabel As Label myLabel = TryCast(Me.FindControl("Label" + X), Label) myLabel.Text = Math.Round(obj,
Dim X As Integer = 1
For Each obj In values
Dim myLabel As Label
myLabel = TryCast(Me.FindControl("Label" + X), Label)
myLabel.Text = Math.Round(obj, 2)
X = X + 1
Next
我知道只有3个obj,所以x总是在1到3之间。当我得到以下信息时,我做错了什么
从字符串“Label”到类型“Double”的转换无效
如果我将(“标签”+x)更改为(“标签1”),我会得到
对象引用未设置为对象的实例
在下面的一行中。如果要连接不进行计算的字符串,则在VB.NET中使用
&
而不是+
(与C相反)。因此,这应该是可行的:
myLabel = TryCast(Me.FindControl("Label" & X), Label)
您还应该毫无例外地将选项Strict
设置为On
。然后,您首先必须修复许多编译器错误,但这将有助于编写更健壮的代码。这也不会编译:
myLabel.Text = Math.Round(obj, 2)
因为Math.Round
返回一个Double
和标签。Text
是一个字符串。您只需要使用Math.Round(obj,2).ToString()
来修复它
以下是使用Linq
获取标签的不同方法:
Dim myLabels = From lbl In Me.Form.Controls.OfType(Of Label)()
Where lbl.ID.StartsWith("Label")
For Each lbl As Label In myLabels
' ... '
Next
另外,由于您使用TryCast
在使用变量之前检查它-如果它不进行强制转换,它将一文不值
myLabel = TryCast(Me.FindControl("Label" & X.ToString), Label)
If myLabel IsNot Nothing Then
'safe to use variable here
End If
你在连接吗?这不应该是“Label”&X)我仍然在“mylabel.text=”行中得到“Object reference not set to a instance of a Object”。mylabel也显示为nothing@user2050577:可能这些标签不在页面顶部,而是在另一个容器控件中,例如GridView
,UserControl
,或者您正在使用母版页。这些标签在一个表中。@user2050577:什么类型的表,html表格或ASP.NET表格
-类或网格视图
(也呈现为表格)?它们位于html表格中