2010-12-08 2 views
4

У меня есть обязательный полевой валидатор для проверки выпадающего списка. этот раскрывающийся список является автоповторным, а свойство reasonvalidation установлено равным false.Validation Message по-прежнему появляется, когда выпадающий список autopostback срабатывает

проблема заключается в том, что когда я выбираю элемент по умолчанию, отображается сообщение о проверке, но все равно делает обратную передачу. А после обратной передачи сообщение исчезает.

вот фрагмент кодов:

<asp:RequiredFieldValidator ID="ContactMethodRequired" runat="server" ControlToValidate="ContactPreferences" 
      Display="Dynamic" ErrorMessage="Please choose your contact method" 
      EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator> 
     <div> 
      <asp:DropDownList ID="ContactPreferences" runat="server" AutoPostBack="true" CausesValidation="false"> 
       <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem>       
       <asp:ListItem Text="Email" Value="Email"></asp:ListItem> 
       <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem> 
      </asp:DropDownList> 
     </div> 
+0

Спасибо всем, я закончил делать проверку через чисто JavaScript. – fengd

ответ

0
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
<title>Untitled Page</title> 
<script type="text/javascript" language="javascript" > 
function ValidPage() 
    {        
     if (typeof(Page_ClientValidate) == 'function') 
     { 
      if (typeof (Page_ClientValidate) == 'function') { Page_ClientValidate();  } 
      if (!Page_IsValid) 
      {   

       return false; 
      }     
      return Page_IsValid; 
     } 
     return true; 
    } 

</script> 
</head> 
<body > 
    <form id="form1" runat="server" onsubmit="return ValidPage();" > 

     <div> 
      <asp:DropDownList ID="ContactPreferences" runat="server"  AutoPostBack="true" CausesValidation="false"> 
       <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem> 
       <asp:ListItem Text="Email" Value="Email" ></asp:ListItem> 
       <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem> 
      </asp:DropDownList> 


      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="ContactPreferences" 
      Display="Dynamic" ErrorMessage="Please choose your contact method" 
      EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator> 

     </div> 

    </form> 
</body> 
</html> 
+0

Спасибо за ваш ответ. Но то, что я хочу знать, это то, что это ошибка DropDownList и Validator при публикации? – fengd

+0

результат этого кода является валидацией, но OP хочет достичь того, что выпадающий список не проверен. – AGuyCalledGerald

0

Вы видите вызов метода WebForm_DoPostBackWithOptions в OnChange случае HTML-элемента, или вызов метода __doPostBack? Первый выполняет вызов Page_ClientValidate() перед выполнением обратной передачи, вы можете использовать инструмент отладки JS, чтобы увидеть путь его принятия. Кроме того, поскольку его группа проверки по умолчанию может вызвать что-то еще?

+0

У меня также есть эта проблема - я попытался использовать Firebug, чтобы увидеть, что делает __doPostBack, но я не мог его обработать. Любые другие предложения? –

0

Как-то валидатор что-то путает. Чтобы предотвратить поведение, существуют различные способы:

1) Вы можете установить

EnableClientScript="false" 

на валидатор, то есть он проверяет на сервере.

Если это нежелательные побочные эффекты (потому что валидатор «обогнала» другими клиентскими валидаторы), вы можете сделать это

2) добавить JavaScript/JQuery-функции на странице:

function HideValidator() { 

    var validator = $('#<%= ContactMethodRequired.ClientID %>'); 
    validator.hide(); 
} 

и событие-обработчик для DDL:

onchange="HideValidator();" 
Смежные вопросы