asp.net - 未调用下拉列表的自定义验证器(显然)

标签 asp.net vb.net drop-down-menu customvalidator autopostback

为使用自动回发的下拉列表编写自定义验证器。似乎完全忽略了验证。为什么它被忽略?有简单的修复方法吗?

注意我没有使用 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")行...它永远不会被调用,这也表明(我认为)验证器永远不会被调用。

最佳答案

删除更新面板并尝试使用 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;            
    }

希望这有帮助..

关于asp.net - 未调用下拉列表的自定义验证器(显然),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6535443/

相关文章:

javascript - 使用 JavaScript 或 jquery 使悬停 CSS 下拉菜单可点击

asp.net - 我可以直接从 SQL Server 编辑办公文档吗?

c# - 过滤gridview数据源

c# - 在 C# .NET Web 应用程序中每天安排任务的正确方法

.net - 如何将字符串值用作 boolean 值

php - 如何在下拉字母表中从 SQL 中排序值并将值 "Other"放在底部

c# - Request.Url 在 iF​​rame 中时?

vb.net - 检查 datagridview 中的特定数据类型

vb.net - AutoMapper .ForMember 方法编译错误。无效的重载

html - 下拉子菜单自动宽度不起作用