1

I am working a web form and I am having a bit of trouble. I have a radio button list on the page for the user to select an item from. Depending on their selection, I would like for a field to appear on the screen for them to elaborate their request.

Here is my HTML for my radio button list and panels:

<div class="formInformation">
                    <div class="reason">
                        <h3><b>Why are you requesting a new badge?</b></h3>
                        <asp:RadioButtonList ID="rblReason" runat="server" AutoPostBack="true"
                            RepeatDirection="Vertical" Width="350px" 
                            onselectedindexchanged="rblReason_SelectedIndexChanged">
                            <asp:ListItem Text="Broken">Broken</asp:ListItem>
                            <asp:ListItem Text="Faded">Faded</asp:ListItem>
                            <asp:ListItem Text="Lost">Lost</asp:ListItem>
                            <asp:ListItem Text="NotWork">Doesn&#39;t Work</asp:ListItem>
                            <asp:ListItem Text="Name">Name Change</asp:ListItem>
                            <asp:ListItem Text="Title">Title Change</asp:ListItem>
                            <asp:ListItem Text="Dept">Dept/Location Change</asp:ListItem>
                            <asp:ListItem Text="Other">Other</asp:ListItem>
                        </asp:RadioButtonList>
                    </div>
                    <div class="reason">
                        <h3><b>Further Information:</b></h3>
                        <h4>*Fields will become visible depending on your selection to the left*</h4>
                        <asp:Panel ID="pnlLost" runat="server" Visible="False"> 
                            <div class="pnlText"><h5><b>Are you enrolled in QuickCharge?</b></h5></div>
                            <asp:RadioButtonList ID="rblLost" runat="server"
                                RepeatDirection="Horizontal" Width="350px">
                                <asp:ListItem>Yes</asp:ListItem>
                                <asp:ListItem>No</asp:ListItem>
                            </asp:RadioButtonList>
                        </asp:Panel>
                        <asp:Panel ID="pnlDoesNotWork" runat="server" Visible="False">
                            <div class="pnlText"><h5><b>Explain what doesn't work:</b></h5></div>
                            <asp:TextBox ID="txtNotWorking" runat="server" TextMode="MultiLine" 
                                    Width="225px"></asp:TextBox>
                        </asp:Panel>
                        <asp:Panel ID="pnlNameChange" runat="server" Visible="False">
                            <div class="pnlText"><h5><b>For name change:</b></h5></div>
                            <div class="pnlText">Submit request then contact HR: 770.836.9517</div>
                        </asp:Panel>
                        <asp:Panel ID="pnlTitleChange" runat="server" Visible="False">
                            <div class="pnlText"><h5><b>What is you new title?</b></h5></div>
                            <asp:TextBox ID="txtNewTitle" runat="server" TextMode="MultiLine" 
                                    Width="225px"></asp:TextBox>
                        </asp:Panel>
                        <asp:Panel ID="pnlDeptLocation" runat="server" Visible="False">
                            <div class="pnlText"><h5><b>What is your new Dept/Location?</b></h5></div>
                            <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" 
                                    Width="225px"></asp:TextBox>
                        </asp:Panel>
                        <asp:Panel ID="pnlOther" runat="server" Visible="False">
                            <div class="pnlText"><h5><b>Elaborate:</b></h5></div>
                            <asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine" 
                                    Width="225px"></asp:TextBox>
                        </asp:Panel>
                    </div>
                </div>

Here is my C# to display panels based on selection in the radio button list

  protected void rblReason_SelectedIndexChanged(object sender, EventArgs e)
    {
        switch (rblReason.SelectedItem.Text)
        {
            case "Broken":
                pnlLost.Visible = false;
                pnlDoesNotWork.Visible = false;
                pnlNameChange.Visible = false;
                pnlTitleChange.Visible = false;
                pnlDeptLocation.Visible = false;
                pnlOther.Visible = false;
                break;
            case "Faded":
                pnlLost.Visible = false;
                pnlDoesNotWork.Visible = false;
                pnlNameChange.Visible = false;
                pnlTitleChange.Visible = false;
                pnlDeptLocation.Visible = false;
                pnlOther.Visible = false;
                break;
            case "Lost":
                pnlLost.Visible = true;
                pnlDoesNotWork.Visible = false;
                pnlNameChange.Visible = false;
                pnlTitleChange.Visible = false;
                pnlDeptLocation.Visible = false;
                pnlOther.Visible = false;
                break;
            case "NotWork":
                pnlDoesNotWork.Visible = true;
                pnlLost.Visible = false;
                pnlNameChange.Visible = false;
                pnlTitleChange.Visible = false;
                pnlDeptLocation.Visible = false;
                pnlOther.Visible = false;
                break;
            case "Name":
                pnlNameChange.Visible = true;
                pnlLost.Visible = false;
                pnlDoesNotWork.Visible = false;
                pnlTitleChange.Visible = false;
                pnlDeptLocation.Visible = false;
                pnlOther.Visible = false;
                break;
            case "Title":
                pnlTitleChange.Visible = true;
                pnlLost.Visible = false;
                pnlDoesNotWork.Visible = false;
                pnlNameChange.Visible = false;
                pnlDeptLocation.Visible = false;
                pnlOther.Visible = false;
                break;
            case "Dept":
                pnlDeptLocation.Visible = true;
                pnlLost.Visible = false;
                pnlDoesNotWork.Visible = false;
                pnlNameChange.Visible = false;
                pnlTitleChange.Visible = false;
                pnlOther.Visible = false;
                break;
            case "Other":
                pnlOther.Visible = true;
                pnlLost.Visible = false;
                pnlDoesNotWork.Visible = false;
                pnlNameChange.Visible = false;
                pnlTitleChange.Visible = false;
                pnlDeptLocation.Visible = false;
                break;
        }
    }

Currently the "Broken", "Faded", "Lost", and "Other" cases work perfectly. Any ideas why the other four don't? I tried looking for spelling errors, but I didn't find any. Then again it could just be that I can't see my own mistakes.

Any assistance is appreciated!

4

3 回答 3

1

You probably need to use text as currently the text attribute is giving text between ListItem tags not the text of Text attribute.

Change

case "Name":

To

case "Name Change"

OR

Change

<asp:ListItem Text="Name">Name Change</asp:ListItem>

To

<asp:ListItem Text="Name Change" Value="Name"></asp:ListItem>

You have redundant code which could be avoided

 pnlLost.Visible = false;
 pnlDoesNotWork.Visible = false;
 pnlNameChange.Visible = false;
 pnlTitleChange.Visible = false;
 pnlDeptLocation.Visible = false;
 pnlOther.Visible = false;

 switch (rblReason.SelectedItem.Text)
 {
        case "NotWork":
            pnlDoesNotWork.Visible = true;
            break;
        case "Name":
            pnlNameChange.Visible = true;            
            break;
        case "Title":
            pnlTitleChange.Visible = true;
            break;
        case "Dept":
            pnlDeptLocation.Visible = true;
            break;
        case "Other":
            pnlOther.Visible = true;
            break;
 }
于 2013-06-04T15:33:59.120 回答
0

Text将属性更改为Value这样:

 <asp:ListItem Value="NotWork">Doesn&#39;t Work</asp:ListItem>

然后在开关盒中进行检查rblReason.SelectedValue

switch (rblReason.SelectedValue)
{
.
.
.
}
于 2013-06-04T15:37:49.567 回答
0

另一种要考虑的方法类似于下面的代码,并且不需要 switch 语句。

var text = rblReason.SelectedItem.Text;
var culture = CultureInfo.InvariantCulture;

pnlLost.Visible = string.Equals(text, "Lost", culture);
pnlDoesNotWork.Visible = string.Equals(text, "???", culture);
...
于 2013-06-04T15:42:03.527 回答