以下のコードをご覧ください。
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim c1 As New CheckBox
c1.ID = "Test1/" 'line 7
PlaceHolder1.Controls.Add(c1)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each c As Control In Page.Controls
For Each d As Control In c.Controls
For Each f As Control In d.Controls
For Each g As Control In f.Controls
For Each h As Control In g.Controls
If TypeOf h Is CheckBox Then
Dim cbox As New CheckBox
cbox = CType(h, CheckBox)
MsgBox(cbox.Checked) 'Line 20
End If
Next
Next
Next
Next
Next
End Sub
End Class
default.aspxページにはPlaceHolder1というプレースホルダーがあります。20行目のMessageBoxはTrueを出力しています。次のWebページから引用した以下の引用をご覧ください:http://msdn.microsoft.com/en-us/library/system.web.ui.control.id.aspx
「このプロパティの有効な値は、英数字とアンダースコア文字(_)の組み合わせのみです。スペースやその他の無効な文字を含めると、ASP.NETページパーサーエラーが発生します。」
/は英数字ではないので、メッセージボックスをどのように真に出力できますか?7行目を:c1.ID = "Test1:"
に変更すると、予想どおりにfalseが出力されます(:(コロン)は英数字ではないため)。一貫性はありません。何かが足りません。