customvalidator для dropdownlist не вызывается (по-видимому) - PullRequest
2 голосов
/ 30 июня 2011

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

Примечание. Я не использовал ControlToValidate

asp.net:

     <asp:UpdatePanel ID="updatePanel" runat="server" UpdateMode="Conditional" Visible="true" RenderMode="Inline">
        <ContentTemplate>
        <asp:DropDownList ID="ddlCommandAssign" runat="server" AutoPostBack="true">
        </asp:DropDownList>
          <asp:CustomValidator id="val_command_assigned" runat="server"  
          ErrorMessage="* " 
          display="Static"
          OnServerValidate="commandAssigned" 
          />
                </ContentTemplate>
       <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ddlCommandAssign" 
                EventName="SelectedIndexChanged" />
        </Triggers>

    </asp:UpdatePanel>

Позади кода:

Sub commandAssigned(ByVal source As Object, _
  ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)

    Dim s As String
    s = ddlCommandAssign.SelectedValue
    'if s = "1" then 
    '  args.IsValid = true
    'else
    '  args.IsValid = False
    'end if
    args.IsValid = False
End Sub

В целях отладки я хочу, чтобы он каждый раз выходил из строя.

Кажется, он вообще не выполняет код позади.

Для отладки я добавил строку response.redirect ("dummy.html") ... которая никогда не вызывается, что также указывает (я думаю), что валидатор никогда не вызывается.

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Удалите панель обновления и попробуйте выполнить проверку на стороне клиента, используя javascript.

СТОРОНА КЛИЕНТА

Определение события JavaScript,

 function ValidateFunction(sender,args) 
 {
   var ddlCommandAssign= document.getElementById('<%=ddlCommandAssign.ClientID %>');
    if (ddlCommandAssign.options[control.selectedIndex].value=='0') 
    {  args.IsValid = false;//This shows the validation error message and stops execution at client side itself.}
  else { args.IsValid = true;//This will return to the server side. }    
 }

Раздел Aspx:

  <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem Value="1">select</asp:ListItem>
        <asp:ListItem Value="2">sdasda</asp:ListItem>
    </asp:DropDownList>
    <asp:CustomValidator ID="valCustmID" runat="server" ErrorMessage="*" ForeColor="Red"
        ValidationGroup="group1" ClientValidationFunction="ValidateFunction"></asp:CustomValidator>
    <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="group1" />

ПРИМЕЧАНИЕ: И пользовательский валидатор, и кнопка запуска должны иметь одну и ту же группу валидации.

СЕРВЕРНАЯ ВАЛИДАЦИЯ

Если вы действительно хотите на стороне сервера проверки, посмотрите код ниже:

     <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:DropDownList ID="DropDownList1" runat="server">
                <asp:ListItem Value="1">select</asp:ListItem>
                <asp:ListItem Value="2">sdasda</asp:ListItem>
            </asp:DropDownList>
            <asp:CustomValidator ID="CustomValidator1" OnServerValidate="commandAssigned" runat="server" ErrorMessage="*" ValidationGroup="group1"></asp:CustomValidator>
            <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="group1" />
        </ContentTemplate>
    </asp:UpdatePanel>

ПРИМЕЧАНИЕ: И пользовательский валидатор, и кнопка запуска должны иметь одну и ту же группу валидации.

код позади события выглядит следующим образом:

    protected void commandAssigned(object source, ServerValidateEventArgs args)
    {
        if (DropDownList1.SelectedItem.Value == "1")            
            args.IsValid = false;  //since you gave controlToValidate="DropDownList1"  this will display the error message.       
        else           
            args.IsValid = true;            
    }

Надеюсь, это поможет ..

2 голосов
/ 23 октября 2011

я столкнулся с той же проблемой .. но наконец-то получил решение.это происходит только тогда, когда в выпадающем списке нет добавленных вами элементов.

1 голос
/ 30 июня 2011

У вас есть , чтобы указать элемент управления для проверки с использованием свойства ControlToValidate с метким именем:

<asp:CustomValidator id="val_command_assigned" runat="server"
    ErrorMessage="* " Display="Static" OnServerValidate="commandAssigned"
    ControlToValidate="ddlCommandAssign" />

В противном случае пользовательский валидатор не будет выполнять никакой проверкибы то ни было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...