在DataBound DropDownList中禁用PostBack for blank / default ListItem

时间:2011-06-30 13:34:01

标签: c# asp.net drop-down-menu postback

我有一个从数据源填充的DropDownList。绑定后,我在列表顶部放置一个空字段,使其对用户显示为空白(创建一种“默认项目”)。我在处理SelectedIndexChanged事件时有一些代码,但如果用户要选择空的ListItem,则不需要执行它。

这是我的代码:

的.aspx

<asp:DropDownList ID="dropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="dropDownList_SelectedIndexChanged">
</asp:DropDownList>  

C#Codebehind添加空白ListItem

dropDownList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
dropDownList.SelectedIndex = 0;

由于当用户只点击此特定索引时我不需要页面进行回发,因此我想完全禁用回复只是此列表项。这甚至可能吗?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:3)

设置disabled="disabled",这将使项目无法选择(而不是回发)

<asp:DropDownList runat="server" ID="dddl">
    <asp:ListItem Text="" disabled="disabled" Selected="True"></asp:ListItem>
    <asp:ListItem Text="test"></asp:ListItem>
</asp:DropDownList>

或者,如果您希望能够选择第一个(空)项而不进行回发,请执行以下操作:

<asp:DropDownList runat="server" ID="dddl" AutoPostBack="true" onchange="if(this.selectedIndex == 0)return false;">
    <asp:ListItem Text="" Selected="True"></asp:ListItem>
    <asp:ListItem Text="test"></asp:ListItem>
</asp:DropDownList>

答案 1 :(得分:2)

您可以添加必填字段验证程序。然后将DropDownList的CausesValidation属性设置为true。这将阻止回发并提供最终用户的反馈。

    <asp:DropDownList ID="dropDownList" runat="server" AutoPostBack="true"  OnSelectedIndexChanged="dropDownList_SelectedIndexChanged" CausesValidation="true">
    </asp:DropDownList>
    <asp:RequiredFieldValidator ID="rfvDropDownList" runat="server" ErrorMessage="Must select a value!" ControlToValidate="dropDownList" />

答案 2 :(得分:1)

你能否添加一个onChange属性来运行一个JS函数,在回发之前检查该值是否为空?

dropDownList.Attributes.Add("onChange", "javascript: return ddlChange()");

function ddlChange
{
    if(document.getElementById("<%= dropDownList.ClientID %>").value == "")
        return false;

    return true;
}