2010-05-25 14 views
3

ListView에서 유효성 검사를 구현하는 방법을 알아 내려고 노력하고 있습니다. 목표는 CheckBox가 선택된 경우에만 사용자가 TextBox 텍스트에 텍스트를 입력하도록 요구하는 것입니다. 단점은 이러한 컨트롤이 ListView의 EditTemplate에 있다는 것입니다.ASP.net에서 조건부 필수 필드 유효성 검사 ListView

<tr style="background-color: #00CCCC; color: #000000"> 
    <td> 
     Assume Risk? 
     <asp:CheckBox ID="chkWaive" runat="server" 
      Checked='<%# Bind("Waive") %>' /> 
    </td> 
    <td colspan="5"> 
     <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
      runat="server" ErrorMessage="Comments required" 
      ControlToValidate="txtComments" /> 
     <asp:TextBox Width="95%" ID="txtComments" runat="server" 
      Text='<%# Eval("Comment") %>'></asp:TextBox> 
    </td> 
    <td> 
     <asp:Button ID="btnSave" runat="server" 
      Text="Save" CommandName="Update" Width="100px" /> 
    </td> 
</tr> 

이 방법을 사용하여 조건부 검증 할 수있는 방법이 있나요 : 아래 EditTemplate의 관련 코드 부분의 조각은 무엇입니까? 그렇지 않은 경우 Listview의 ItemUpdating 이벤트 또는 다른 곳에 수동으로 유효성을 검사 할 수있는 방법이 있습니까? 에 경고 또는 경고 팝업을 통해 경고합니다.

답변

1

에서 촬영 부적절한 플레이로 ListView가 EditItem 속성을 노출한다는 사실을 놓쳤습니다. 어떤 의미 나는 그 상태 씨 Grassman의 응답 당 직접 CustomValidator를 사용하여 텍스트 상자를 조회 할 수 있습니다

CType(ListView1.EditItem.FindControl("chkWaive"),CheckBox).Checked 

멀리 얻을 수 있습니다.

4

을 사용할 수 있습니다.

ASPX

<asp:CustomValidator runat="server" id="custPrimeCheck" 
     ControlToValidate="txtPrimeNumber" 
     OnServerValidate="PrimeNumberCheck" 
     ClientValidationFunction="CheckPrime" 
     ErrorMessage="Invalid Prime Number" /> 

서버 측 검증

Sub PrimeNumberCheck(sender as Object, args as ServerValidateEventArgs) 
    Dim iPrime as Integer = Cint(args.Value), iLoop as Integer, _ 
     iSqrt as Integer = CInt(Math.Sqrt(iPrime)) 

    For iLoop = 2 to iSqrt 
     If iPrime mod iLoop = 0 then 
     args.IsValid = False 
     Exit Sub 
     End If 
    Next 

    args.IsValid = True 
End Sub 

클라이언트 측 검증

<script language="JavaScript"> 
<!-- 
    function CheckPrime(sender, args) 
    { 
    var iPrime = parseInt(args.Value); 
    var iSqrt = parseInt(Math.sqrt(iPrime)); 

    for (var iLoop=2; iLoop<=iSqrt; iLoop++) 
     if (iPrime % iLoop == 0) 
     { 
     args.IsValid = false; 
     return; 
     } 

    args.IsValid = true; 
    } 
// --> 
</script> 

샘플 치명적인 창피에서 http://www.4guysfromrolla.com/articles/073102-1.aspx

+0

예제는 완벽하게 정상적인 경우에는 유효하지만 다른 컨트롤의 상태를 확인하거나 DataRepeater 컨트롤을 처리하지 않습니다. CustomValidator를 사용하려고 생각했지만 DataRepeater 행의 컨트롤 상태, 특히 서버 측 컨트롤의 상태를 확인하는 방법을 확인할 수 없습니다. –

+0

올바른 방향으로의 한 걸음 이었지만; 내 대답은 내가 멀리 CustomValidator와 함께 ListView에 의해 노출 EditItem을 사용하여 얻을 수있는 설명합니다. 도움을 주셔서 감사합니다. –

+0

감사합니다. ListView에 통합하기위한 몇 가지 코드를 제공 하겠지만 시간이 부족합니다. 당신이 그것을 알아 낸 것을 기뻐. –

관련 문제