2013-10-16 6 views
0

DB에서 채울 드롭 다운 목록이 있으며 비즈니스 논리에 따라 서버 쪽에서 유효 기간을 지정하여 드롭 다운 목록에서 선택한 항목 (TEXT)의 유효성을 검사 할 수 있어야합니다. 요구 사항 상태 나는 단순히 SQL 문의 일부로 필터링 할 수 없다. 필자가 해보려 던 솔루션은 단순히 코드 뒤에 customvalidation을 만드는 것입니다.asp.net Dropdownlist 컨트롤을 참조하는 Customvalidator 서버 유효성 검사

유효성 검사가 호출되지만 선택한 항목의 ddl DataTextField 값을 참조하는 방법을 알 수 없습니다. 시도하고 asp.net 시스템 아래의 서버 측 코드를 수행 할 때 내 드롭 다운 목록을 detailsview 내에 존재하지 않고 그 결과로 빨간색 밑줄을 제공합니다. 이 경우에는 항상 insertmode가됩니다.

제안


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;  

}

답변

0

머피의 법칙은, 몇 시간 후 자신의 질문에 대답.

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

     if (ddlList != null) 
     { 

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

     }