asp.net Dropdownlist Customvalidator servervalidate контроль ссылок

У меня есть раскрывающийся список, который я заполняю из БД, и в зависимости от бизнес-логики мне нужно иметь возможность проверить выбранный элемент (ТЕКСТ) из раскрывающегося списка с проверкой на стороне сервера. Состояние требований Я не могу просто отфильтровать его как часть инструкции SQL. Решение, которое я пытался заставить работать, состоит в том, чтобы просто создать пользовательскую проверку в коде позади.

Вызывается проверка, НО я не могу понять, как ссылаться на значение ddl DataTextField для выбранного элемента. Когда я пытаюсь выполнить код на стороне сервера ниже, система 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>

CODE BEHIND

protected void ddlPos_Check(object sender, ServerValidateEventArgs args)

{

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

}


person PGB    schedule 16.10.2013    source источник


Ответы (1)


Закон Мерфи, ответь на свой вопрос через несколько часов.

        DropDownList ddlList=DetailsView2.FindControl("ddlPosition") as DropDownList;

        if (ddlList != null)
        {

            if (ddlList.SelectedItem.Text.Contains("text")) {
                        args.IsValid = false;    
            }
             else
            {
                   args.IsValid = true;
            }

        }    
person PGB    schedule 16.10.2013