2013-11-25 41 views
0

我有一個包含幾個項目的DropDownList。我想使用RequiredFieldValidator來驗證這個控件。我的ASP.NET代碼如下所示:DropDownlist的RequiredFieldValidator即使在DropDownList中的某個項目被選中時也會觸發

<asp:DropDownList runat="server" ID ="ddlType"></asp:DropDownList> 
<asp:DropDownList runat="server" ID ="ddlItems"></asp:DropDownList> 
<asp:RequiredFieldValidator ID="valType" runat="server" ControlToValidate="ddlItems" Display="Dynamic" ErrorMessage="* Please select an option"></asp:RequiredFieldValidator> 
<asp:Button ID="btnSubmit" runat="server" text="Save" /> 

而在代碼隱藏我的Page_Load中的功能是這樣的:

With ddlType 
     .Items.Add(New ListItem("-- Select --", "-- Select --")) 
     .Items.Add(New ListItem("Grocery", "10")) 
     .Items.Add(New ListItem("Stationery", "30")) 
    End With 

我有一個加載基於第一所作的選擇第二下拉列表其他功能下拉列表:

Protected Sub ddlType_Load(sender As Object, e As System.EventArgs) Handles ddlType.Load 
    If ddlType.SelectedValue = "10" Then 
     With ddlItems 
      .Items.Clear() 
      .Items.Add(New ListItem("-- Select --", "-- Select --")) 
      .Items.Add(New ListItem("Milk", "11")) 
      .Items.Add(New ListItem("Eggs", "12")) 
      .Items.Add(New ListItem("Cheese", "13")) 
      .Items.Add(New ListItem("Bread", "14")) 
     End With 
    Else 
     With ddlItems 
      .Items.Clear() 
      .Items.Add(New ListItem("-- Select --", "-- Select --")) 
      .Items.Add(New ListItem("Pen", "31")) 
      .Items.Add(New ListItem("Pencil", "32")) 
      .Items.Add(New ListItem("Blank Paper", "33")) 
      .Items.Add(New ListItem("Ruled Paper", "34")) 
      .Items.Add(New ListItem("Eraser", "35")) 
      .Items.Add(New ListItem("Ruler", "36")) 
      .Items.Add(New ListItem("Protractor", "37")) 
      .Items.Add(New ListItem("Permanent Markers", "38")) 
     End With 
    End If 
End Sub 

以下是我的代碼提交按鈕:

Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click 
     If Page.IsValid Then 
      ' Perform SQL Data inserts here. 
     End If 
End Sub 

無論何時我嘗試提交數據,RequiredFieldValidator都會顯示'* Please select an option'錯誤消息,即使我在「ddlItems」下拉列表中選擇了除'-- Select --'以外的其他選項。我試圖提交沒有選擇任何選項,以及選擇每個選項後。不知怎的,提交按鈕的If Page.IsValid條件永遠不會有True值,並且永遠不會到達SQL插入。

有人能幫我解決我可能在這裏失蹤的事嗎?非常感謝您的閱讀。

回答

2

嘗試以下操作:

  1. ddlType_Load事件刪除代碼。相反,將該代碼放入ddlType_SelectedIndexChanged事件中。

  2. Page_load事件中,修改代碼,以便僅在Page.IsPostBack = False時填充ddlType

  3. 在ASPX中,將「初始值」屬性添加到RequiredFieldValidator。例如,<asp:RequiredFieldValidator InitialValue="-- Select --" .../>

  4. 在ASPX中,將自動回傳屬性添加到ddlType控件。例如<asp:DropDownList AutoPostBack = "true" ...></asp:DropDownList>

的頁面是無效的原因是因爲所述ddlItems在頁面加載下拉(這是必需的字段)中的溶液被重新填充(或復位)。

相關問題