RE: RadioButtonList, Web User Control, Firefox, IE

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



its a bug in IE, it should send -1 also.

you are loading the user control too late in the page lifecycle, so that it
does not exist when postback data is applied. the proper place to load
dynamic controls is in the CreateChildControls method (which was designed for
this, or OnInit in a pinch)

-- bruce (sqlwork.com)


"Paul" wrote:

Hallo,

I have a radiobuttonlist control that is added on a custom Web User Control.
This control has a property that exposes the SelectedIndex property of the
embedded radiobuttonlist.

When running this in IE, behaviour is as I would expect it. If I select an
item and do a postback, the page remembers my selection when reloading, and
the SelectedIndex property of my control returns the correct value.

When running this in Firefox 3, I always get a -1 for the SelectedIndex
prop, and the page does not remember my selection when reloading.

If I add a radiobuttonlist directly on to an ASPX page, behaviour is as
expected. Only fails in Firefox when the control is on a custom Web User
Control.

Below I will paste the aspx, ascx, and their respective code behind files.
.Net Framework 3.5. Any advice would be appreciated.

Thanks
Paul

1. FF.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="FF.aspx.vb"
Inherits="FF" %>

<%@ Register Src="TEST.ascx" TagName="TESTcontrol" TagPrefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>

<html xmlns="http://www.w3.org/1999/xhtml";>
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

</div>
<asp:Button ID="Button1" runat="server" Text="Button" Width="55px" />
</form>
</body>
</html>

2. FF.aspx.vb

Partial Class FF
Inherits System.Web.UI.Page
Protected WithEvents rbl As test
Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
rbl = CType(Me.LoadControl("TEST.ascx"), TEST)
rbl.ID = "rblID99"
PlaceHolder1.Controls.Add(rbl)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Button1.Click
Check(Me)
End Sub
Sub Check(ByVal _control As Control)
If _control.ID IsNot Nothing Then
If _control.GetType.ToString =
"System.Web.UI.WebControls.RadioButtonList" Then
Response.Write(CType(_control,
RadioButtonList).SelectedIndex & " - selected index<br/>")
If CType(_control, RadioButtonList).SelectedIndex < 0 Then
MsgBox("Not checked.", MsgBoxStyle.ApplicationModal,
"Questions.")
End If
End If
End If
If _control.HasControls Then
For Each ctrl As Control In _control.Controls
Check(ctrl)
Next
End If
End Sub
End Class

3. TEST.ascx

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="TEST.ascx.vb"
Inherits="TEST" Classname="TEST"%>

<p style="width: 500px">

<asp:Label ID="Question_TXT" runat="server">Q</asp:Label>
</p>
<p style="width: 500px">
<asp:RadioButtonList ID="Answer_RBL" runat="server">
<asp:ListItem></asp:ListItem>
<asp:ListItem></asp:ListItem>
</asp:RadioButtonList>
</p>
</p>

4. TEST.ascx.vb

Partial Class TEST
Inherits System.Web.UI.UserControl
Public ReadOnly Property SelectedIndex() As Integer
Get
Return Answer_RBL.SelectedIndex
End Get
End Property

Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Question_TXT.Text = "Pick One"
Answer_RBL.Items(0).Text = vbTab & "First"
Answer_RBL.Items(1).Text = vbTab & "Second"
End Sub
End Class

.


Quantcast