asp.net 下拉列表自定义验证器服务器验证引用控件



我有一个从数据库中填充的下拉列表,根据业务逻辑,我需要能够使用服务器端可用来验证下拉列表中的选定项目 (TEXT)。需求状态 我不能简单地将其作为 SQL 语句的一部分过滤掉。我一直在尝试工作的解决方案是简单地在代码隐藏中创建自定义验证。

验证被调用,但我无法弄清楚如何引用所选项目的 ddl 数据文本字段值。当我尝试执行下面的服务器端代码时,asp.net 系统指出我的下拉列表在详细信息视图中不存在,并因此提供了红色下划线。在这种情况下,它将始终处于插入模式。

建议


ASP 代码


<asp:DetailsView ID="dtlSample" runat="server" AutoGenerateEditButton="true" AutoGenerateRows="false">
      <Fields>

...

        <asp:TemplateField HeaderText="Position">
          <ItemTemplate>
            <%# Eval("Age") %>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:DropDownList ID="ddlPosition" runat="server" AutoPostBack="True" 
                LDataSource="Select Position, PositionId from ...." DataTextField="Position" DataValueField="PositionId"
                 ></asp:DropDownList>
          </EditItemTemplate>
          <InsertItemTemplate>
            <asp:DropDownList ID="ddlPosition" runat="server" AutoPostBack="True" 
                LDataSource="Select Position, PositionId from ...." DataTextField="Position" DataValueField="PositionId"
                 ></asp:DropDownList>
          </InsertItemTemplate>
    <asp:CustomValidator ID="cvPos" Display="Dynamic" ControlToValidate = "DDLPosition"
          OnServerValidate="ddlPos_Check" runat="server" ForeColor="Red" ErrorMessage="My error message"></asp:CustomValidator>
        </asp:TemplateField>
      </Fields>

代码隐藏

protected void ddlPos_Check(object sender, ServerValidateEventArgs args)

{

    if (ddPosition.SelectedItem.Text.Contains("some value")            
        args.IsValid = false;         
    else           
        args.IsValid = true;    

}

墨菲定律,几个小时后回答你自己的问题。

        DropDownList ddlList=DetailsView2.FindControl("ddlPosition") as DropDownList;
        if (ddlList != null)
        {
            if (ddlList.SelectedItem.Text.Contains("text")) {
                        args.IsValid = false;    
            }
             else
            {
                   args.IsValid = true;
            }
        }    

相关内容

最新更新