如果选择特定的下拉列表项,如何在下拉列表下方显示消息而不是警告框?

时间:2015-04-26 06:11:24

标签: asp.net vb.net updatepanel autopostback

为了提供一致性,当有人在下拉列表中选择特定项目时,我无法使用警告框在我的代码中显示消息。只有当某人选择了特定项目时,才需要在下拉字段下方显示红色消息。

因此,在这种情况下,如果有人从状态下拉列表中选择Alabama,则在做出选择后,需要立即在下拉列表框下方显示红色消息。此表单的旧版本可以正常工作,但是包含许多更改的表单的新版本不会显示此消息。

在代码隐藏文件(aspx.vb文件)中,我有以下代码片段:

Protected Sub StateDropDownList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles StateDropDownList.SelectedIndexChanged
    If StateDropDownList.Text = "AK" Then
        AlabamaPanel.Visible = True
        Session("Alabama") = "Yes"
    Else
        AlabamaPanel.Visible = False
        Session("Alabama") = "No"
    End If
            StateDropDownList.Focus()
End Sub

我正在使用以前的代码进行某些编辑,另一部分问题是我不理解Session(“Alabama”)部分 - 我在代码中找不到其他地方的Session(“Alabama”) )列出或者更确切地说是了解Session()是什么以及它如何知道Alabama Session是什么......所以如果你对Session()有所了解可能会有所帮助 - 我会看到这一点(https://msdn.microsoft.com/en-us/library/ms178581%28v=vs.140%29.aspx)但这并没有帮助我理解。 Alabama本身存在的代码中唯一存在于下拉列表的项目中。也许这是问题的一部分,因为在旧代码中,Alabama在一个长列表中特别注明,如(在aspx文件中,而不是aspx.vb文件中):

<asp:DropDownList class="DropDowns" ID="StateDropDownList" runat="server" AutoPostBack="True">
    <asp:ListItem></asp:ListItem>
    <asp:ListItem Value="AL">Alabama</asp:ListItem>
    <asp:ListItem Value="AK">Alaska</asp:ListItem>
    <asp:ListItem Value="AZ">Arizona</asp:ListItem>
    <asp:ListItem Value="AR">Arkansas</asp:ListItem>
    <asp:ListItem Value="CA">California</asp:ListItem>
    <asp:ListItem Value="CO">Colorado</asp:ListItem>
    <asp:ListItem Value="CT">Connecticut</asp:ListItem>
    <asp:ListItem Value="DE">Delaware</asp:ListItem>
    <asp:ListItem Value="DC">District of Columbia</asp:ListItem>
    <asp:ListItem Value="FL">Florida</asp:ListItem>
    <asp:ListItem Value="GA">Georgia</asp:ListItem>
    <asp:ListItem Value="HI">Hawai'i</asp:ListItem>
    <asp:ListItem Value="ID">Idaho</asp:ListItem>
    <asp:ListItem Value="IL">Illinois</asp:ListItem>
    <asp:ListItem Value="IN">Indiana</asp:ListItem>
    <asp:ListItem Value="IA">Iowa</asp:ListItem>
    <asp:ListItem Value="KS">Kansas</asp:ListItem>
    <asp:ListItem Value="KY">Kentucky</asp:ListItem>
    <asp:ListItem Value="LA">Louisiana</asp:ListItem>
    <asp:ListItem Value="ME">Maine</asp:ListItem>
    <asp:ListItem Value="MD">Maryland</asp:ListItem>
    <asp:ListItem Value="MA">Massachusetts</asp:ListItem>
    <asp:ListItem Value="MI">Michigan</asp:ListItem>
    <asp:ListItem Value="MN">Minnesota</asp:ListItem>
    <asp:ListItem Value="MS">Mississippi</asp:ListItem>
    <asp:ListItem Value="MO">Missouri</asp:ListItem>
    <asp:ListItem Value="MT">Montana</asp:ListItem>
    <asp:ListItem Value="NE">Nebraska</asp:ListItem>
    <asp:ListItem Value="NV">Nevada</asp:ListItem>
    <asp:ListItem Value="NH">New Hampshire</asp:ListItem>
    <asp:ListItem Value="NJ">New Jersey</asp:ListItem>
    <asp:ListItem Value="NM">New Mexico</asp:ListItem>
    <asp:ListItem Value="NY">New York</asp:ListItem>
    <asp:ListItem Value="NC">North Carolina</asp:ListItem>
    <asp:ListItem Value="ND">North Dakota</asp:ListItem>
    <asp:ListItem Value="OH">Ohio</asp:ListItem>
    <asp:ListItem Value="OK">Oklahoma</asp:ListItem>
    <asp:ListItem Value="OR">Oregon</asp:ListItem>
    <asp:ListItem Value="PA">Pennsylvania</asp:ListItem>
    <asp:ListItem Value="RI">Rhode Island</asp:ListItem>
    <asp:ListItem Value="SC">South Carolina</asp:ListItem>
    <asp:ListItem Value="SD">South Dakota</asp:ListItem>
    <asp:ListItem Value="TN">Tennessee</asp:ListItem>
    <asp:ListItem Value="TX">Texas</asp:ListItem>
    <asp:ListItem Value="UT">Utah</asp:ListItem>
    <asp:ListItem Value="VT">Vermont</asp:ListItem>
    <asp:ListItem Value="VA">Virgina</asp:ListItem>
    <asp:ListItem Value="WA">Washington</asp:ListItem>
    <asp:ListItem Value="WV">West Virgina</asp:ListItem>
    <asp:ListItem Value="WI">Wisconsin</asp:ListItem>
    <asp:ListItem Value="WY">Wyoming</asp:ListItem>
</asp:DropDownList>

但现在我们调用另一个VB文件来获取状态下拉列表,如上所示的完整集不再出现在代码中。

由于除了这个列表之外没有其他地方不存在或者这个列表确实存在于我们调用的单独的vb文件中,哪个成功填充了下拉列表,那么这可能阻止了Session()的工作? / p>

在新代码中(在aspx文件中,而不是aspx.vb文件中),以上所有内容都替换为:

<label for="StateDropDownList">State <span class="Required">*</span></label>
<asp:DropDownList class="form-control" ID="StateDropDownList" runat="server">
</asp:DropDownList>

我正在尝试使用(在aspx文件中):

<asp:Panel ID="AlabamaPanel" runat="server" Visible="false">
    <tr>
        <td align="center" colspan="3">

            <br />
            <asp:Label ID="AlabamaLabel" runat="server" visibile="false" Text="Alabama Text that I want to appear right below the statedropdownlist field if they choose alabama."
                Font-Bold="True" ForeColor="#e00022" />

        </td>
    </tr>
</asp:Panel>

如果用户选择Alabama并且它根本不显示,则在下拉字段下方的页面上显示文本。我还尝试将长状态列表放回去,而不是调用单独的下拉列表vb文件。

我也尝试使用更新面板,用

包装下拉列表
 <asp:UpdatePanel ID="UpdatePanel1" 
     UpdateMode="Conditional"
     runat="server">
     <ContentTemplate>

       </ContentTemplate>
   </asp:UpdatePanel>

这让我受益,因为在此之前,当我从下拉列表中选择Alabama时,我无法将autopostback =“true”包括在内,而不会将我带到空白屏幕。现在至少整个屏幕都没有消隐...但我仍然没有收到要在屏幕上显示的消息。

我也试过这个,但仍然没有出现任何消​​息:

<asp:DropDownList class="form-control" ID="StateDropDownList" runat="server" AutoPostBack="True" CausesValidation="False" OnSelectedIndexChanged="StateDropDownList_SelectedIndexChanged">

当有人选择阿拉巴马州时,任何想法或任何明显的信息都显示为什么我的信息没有出现?

2 个答案:

答案 0 :(得分:0)

试试这个:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

<asp:UpdatePanel runat="server" ID="updtPnl">
<ContentTemplate>
    <asp:DropDownList class="form-control" ID="StateDropDownList" runat="server" AutoPostBack="True" OnSelectedIndexChanged="StateDropDownList_SelectedIndexChanged">
        <asp:ListItem Value="Al">Alabama</asp:ListItem>
        <asp:ListItem>Other value</asp:ListItem>
    </asp:DropDownList>

    <br />
    <asp:Label ID="AlabamaLabel" runat="server" visibile="false" Text=""
    Font-Bold="True" ForeColor="#e00022" />
</ContentTemplate>
</asp:UpdatePanel>

将代码隐藏更改为:

Protected Sub StateDropDownList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles StateDropDownList.SelectedIndexChanged
If StateDropDownList.SelectedValue = "Al" Then
    AlabamaLabel.Text = StateDropDownList.SelectedItem.Text + " is selected!"
    AlabamaLabel.Visible = True
Else
    AlabamaLabel.Visible = False
End If
End Sub

答案 1 :(得分:0)

在您提供的原始代码中,您遇到以下问题:

1)您正在查看Dropdown的缩写文本,该缩写不是下拉列表中的值,因此您需要使用StateDropDownList.SelectedValue =“AK”

之类的内容。

2)然而AlabamaPanel被设置为可见;您没有将标签的可见性设置为true,因此面板是可见的,但其中没有可见的控件。