c#开关语句和单选按钮列表

本文关键字:单选按钮 列表 语句 开关 | 更新日期: 2023-09-27 18:17:05

我正在工作的网页形式,我有一点麻烦。我在页面上有一个单选按钮列表,供用户从中选择一个项目。根据他们的选择,我希望在屏幕上显示一个字段,以便他们详细说明他们的请求。

这是我的单选按钮列表和面板的HTML:

<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>

这是我的c#显示面板基于选择在单选按钮列表

  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;
        }
    }

目前"破碎","褪色","丢失"answers"其他"的情况下工作完美。知道为什么其他四个没有吗?我试着查找拼写错误,但没有找到。但也有可能只是我看不到自己的错误。

感谢任何帮助!

c#开关语句和单选按钮列表

您可能需要使用文本,因为当前文本属性在ListItem标记之间给出文本,而不是Text属性的文本。

case "Name":

case "Name Change"

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

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

你有可以避免的冗余代码

 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;
 }

Text属性更改为Value,如下:

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

然后在开关箱中检查rblReason.SelectedValue

switch (rblReason.SelectedValue)
{
.
.
.
}

另一种可以考虑的方法是类似下面的代码,其中switch语句是不必要的。

var text = rblReason.SelectedItem.Text;
var culture = CultureInfo.InvariantCulture;
pnlLost.Visible = string.Equals(text, "Lost", culture);
pnlDoesNotWork.Visible = string.Equals(text, "???", culture);
...