2011-06-30 25 views
2

我有一個從數據源填充的DropDownList。綁定後,我在列表頂部放置一個空字段,以便它對用戶顯示爲空(創建一種'默認項目')。我有一些處理SelectedIndexChanged事件的代碼,但如果用戶選擇空的ListItem,它並不需要執行。禁用數據綁定中的空白/默認ListItem PostBack DropDownList

這裏是我的代碼:

的.aspx

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

C#代碼隱藏添加空白列表項

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

因爲我並不需要的頁面做回發,當用戶點擊只是這個特定的索引,我想禁用回發完全爲只是這個listitem。這甚至有可能嗎?如果是這樣,怎麼樣?

回答

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

這將使它甚至不會顯示,但是...我希望它出現,並且可以選擇,只是不做任何事情。 –

+0

對不起,應該是'disabled =「disabled」' – Magnus

+0

我不得不從我的代碼隱藏中做到這一點,因爲我將數據綁定下拉列表(完成時清除所有當前列表項)。當我從代碼隱藏中嘗試並做到這一點時,我被告知,listitem沒有「禁用」屬性。 –

1

你可以添加一個onChange屬性來運行一個JS函數,該函數在回發之前檢查值是否爲空?

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

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

    return true; 
} 
+0

由於某種原因,它爲每個ListItem返回false? –

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