我的page1.aspx
有連續的物件Label1, Label2, Label3, ...
想在後端page1.aspx.vb
代入連續的值
Label1.text=1
Label2.text=2
Label3.text=3
...
請問如何用簡化?
HI,我想可以用迴圈的方式,以下範例可以參考看看:
aspx:
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
</div>
</form>
VB:
Private Sub page1_Load(sender As Object, e As EventArgs) Handles Me.Load
'把所有要放值的label都放進陣列中
Dim labelList() As Label = {Label1, Label2, Label3, Label4}
'對應要放進每個label的值
Dim strList() As String = {"1", "2", "3", "4"}
'用迴圈放值
For i As Integer = 0 To labelList.Length - 1
labelList(i).Text = strList(i)
Next
End Sub
順便給個C#:
protected void Page_Load(object sender, EventArgs e)
{
//把所有要放值的label都放進陣列中
Label[] labelList = {Label1,Label2,Label3,Label4 };
//對應要放進每個label的值
string[] strList = { "1", "2", "3", "4" };
//用迴圈放值
for(int i = 0; i <= labelList.Length - 1; i++)
{
labelList[i].Text = strList[i];
}
}
沒在寫vb, 但陣列應該用一個就可以做完,何必用兩個~
因為我想說如果以後starcity1003大大要設定不同的值就可以直接用了
不然我在留言把他補上去好惹
VB:
Private Sub page1_Load(sender As Object, e As EventArgs) Handles Me.Load
'把所有要放值的label都放進陣列中
Dim labelList() As Label = {Label1, Label2, Label3, Label4}
'用迴圈放值
For i As Integer = 0 To labelList.Length - 1
labelList(i).Text = (i+1).ToString()
Next
End Sub
要設定不同的值,應該寫成function, 把labelList() As Label當作傳入參數,改成只要傳陣列進去,就可以動態產生多個label物件,不用寫死,甚至改成可以支援傳不同的html物件,Hard Code的寫法不大好~
嗚嗚,不好意思
「要設定不同的值,應該寫成function, 把labelList() As Label當作傳入參數,改成只要傳陣列進去,就可以動態產生多個label物件」這邊我應該還是懂,但是他這樣也要多一個放值的陣列,一起傳進那個function中嗎?
謝謝大家幫忙!
我沒有要動態產生物件唷!
我有固定的18個label, 要代入的值是資料庫產生的, 所以我主要是找不到遞增物件名稱如何在後端寫成迴圈或for each 代入text的值
陣列的方式很好,
不知道有沒有更簡潔的語法呢?
因為我還有其他類別的多個物件...
PS. 我不是要動態產生物件唷!
也可以試試看下面的程式碼:
aspx:
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
</div>
</form>
VB:
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
'因為有四個label 所以跑4次迴圈
For i As Integer = 1 To 4
'找出ID為label+i的物件
Dim obj As Label = CType(Me.FindControl("Label" + i.ToString()), Label)
'寫資料
obj.Text = i.ToString()
Next
End Sub
如果有問題可以再告訴我
回應
"並未將物件參考設定為物件的執行個體"
首先要確認你有沒有使用MasterPage的頁面
可以參考看看:
https://dotblogs.com.tw/joysdw12/2011/02/16/21400
哦~!原來如此!
這個頁面我有找到過,不過現在才仔細看上面的說明^^"
我懂了!感恩!
不會ㄛ,加油
我試了還是一樣耶!
lbl = Me.Master.FindControl("ContentPlaceHolder1").FindControl("Label" & i)
ContentPlaceHolder1最後一個字母是123的1吧!這個字串變數是固定的嗎?
他不是固定的哦!你得確認一下你的MasterPage中的內容,看有沒有這個標籤<asp:ContentPlaceHolder></asp:ContentPlaceHolder>
,像我的專案命名方式是這個:
<asp:ContentPlaceHolder ID="MainContent" runat="server"></asp:ContentPlaceHolder>
所以如果是我的label放在這個裡面的話,那程式碼要改成:
lbl = Me.Master.FindControl("MainContent").FindControl("Label" & i)
這樣才會正確
因為我還有其他類別的多個物件... 所以要寫成function 然後就可以要產生什麼類別的多個物件,就傳什麼陣列進去就解決啦,剩下交給樓上…
變成createMutilHtmlObject(array);
謝啦!
感謝神Q超人幫忙,我找到個人認為的最佳寫法:
首先,因為我的頁面有MasterPage,所以,
在Page1.aspx裡就能找到MasterPage的ContentPlaceHolderID
...
<asp:Content ID="ContentPage1" ContentPlaceHolderID="ContentPlaceHolderMasterPage" runat="server">
...
<asp:Label ID="Label1" runat="server"></asp:Label>
<asp:Label ID="Label2" runat="server"></asp:Label>
<asp:Label ID="Label3" runat="server"></asp:Label>
<asp:Label ID="Label4" runat="server"></asp:Label>
...
然後,在Page1.aspx.vb裡:
For i As Integer = 1 To 4
Dim lb As New Label
lb = Me.Master.FindControl("ContentPlaceHolderMasterPage").FindControl("Label" & i)
lb.text = i
Next
搞錯了是網頁,
網頁也可以用字串取得控制項,
忽然間找不到,
晚上再找一下...
I'll try, tkx!
網頁基本上是用ID找控制項,
可以參考 這一篇
我不是要找控制項耶!
我是要把值代入text
你給我方法我找過,
那是"取出"該控制項的值,是read only的,
但我是要把值"寫入"唷!
前端
<form runat="server">
<asp:Button ID="Button1" runat="server" Text="Button" /><br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label><br />
<asp:Label ID="Label2" runat="server" Text=""></asp:Label><br />
<asp:Label ID="Label3" runat="server" Text=""></asp:Label><br />
<asp:Label ID="Label4" runat="server" Text=""></asp:Label>
</form>
後端
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim label As Label
For i = 1 To 4
label = FindControl($"Label{i}")
label.Text = $"測試{i}"
Next
End Sub
畫面
結論:
Read Only在哪裡?
不好意思,因為我有MasterPage,
所以回應錯誤
有Master也是Null不是Read Only吧...
有Master就照 神Q超人 說的那樣加個 Master.FindControl() 就可以了.