3

我有一個asp.net表單,其中包含一個下拉列表,該列表在發佈更改時發佈回服務器,並用某些日期填充第二個下拉列表。asp.net postback在客戶端驗證後阻止

該表單還包含其他字段,其中一些經過驗證的客戶端和某些服務器端。

這是我遇到的問題。如果我得到客戶端驗證錯誤,請嘗試更改下拉列表,第二個下拉列表不會填充。如果我再次更改第一個下拉列表,它會按預期工作。

這裏是我的提交按鈕:

<asp:Button ID="btnSubmit" Text="Submit" runat="server" OnClientClick="Page_ClientValidate(); return checkPassengers();" OnClick="Page_Transfer" ValidationGroup="FormSubmit" /> 

這裏是我的客戶端驗證:

function checkPassengers() { 
    if($("#testField").val() == "Name *" || $("#testField").val() == "") { 
      $("#pltester").prepend("<p class='fillall'>Please fill in all fields marked with *</p>"); 
      return false;  
    } 
}; 

下拉框:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" > 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddl1st" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddl1st" Width="190" AutoPostBack="true" OnSelectedIndexChanged="ChooseDates1st" runat="server" /> 
     <asp:DropDownList ID="ddlDepart1st" AutoPostBack="true" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

回答

4

在使用updatepanels之前,我遇到過很多次這個問題。

我發現,如果該字段需要驗證,那麼你必須實際設置CausesValidation="true"元素,它仍然可以使用updatepanels。

希望這可以幫助你!

1

如果下拉列表中並不需要驗證,您可以在初始下拉列表中設置CausesValidation="false"。這會導致它不會觸發驗證,所以可以隨意更改。

或者,您可以將DropDownList放在不同的ValidationGroup中,以便更改它不會觸發其他控件的驗證。

+0

下拉確實需要進行驗證,這樣將無法正常工作 – Tom 2012-04-20 11:24:40

0
function validateCommand(group) { 
     if (typeof (Page_ClientValidate) == 'function') { 
      Page_ClientValidate(group); 
      if (Page_IsValid) { 
       Page_BlockSubmit = !confirm('Are you sure?'); 
      } 
     } 
    } 
3

只需設置CausesValidation="true"並不能解決我的問題。這似乎是使用asp dropdownlist的SelectedIndexChange事件時的問題。 我發現的解決方法是通過在回發之前驗證不存在的驗證組名稱來重置前端帶有js的驗證。

function ignoreValidation() { 
      if (typeof Page_ClientValidate != 'undefined') { 
       Page_ClientValidate('reset-validation'); 
       Page_BlockSubmit = false; 
      } 
      return true; 
} 

而對於下拉列表

<asp:DropDownList CausesValidation="false" onchange="ignoreValidation();" runat="server" ID="CustomerDropDownList" OnSelectedIndexChanged="LoadCustomers" AutoPostBack="true"/>