programing

ASP.NET 사용자 지정 Validator 클라이언트 측 및 서버 측 유효성 검사가 시작되지 않음

golfzon 2023. 6. 23. 23:55
반응형

ASP.NET 사용자 지정 Validator 클라이언트 측 및 서버 측 유효성 검사가 시작되지 않음

이전에는 이런 일이 없었는데, 어떤 이유로 클라이언트 및 서버 측 유효성 검사 이벤트가 모두 트리거되지 않았습니다.

<asp:TextBox ID="TextBoxDTownCity" runat="server" CssClass="contactfield" />
<asp:CustomValidator ID="CustomValidator2" runat="server" EnableClientScript="true"
    ErrorMessage="Delivery Town or City required"
    ClientValidationFunction="TextBoxDTownCityClient" 
    ControlToValidate="TextBoxDTownCity"
    OnServerValidate="TextBoxDTownCity_Validate" Display="Dynamic" >
</asp:CustomValidator>

서버 측 유효성 검사 이벤트:

protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args)
{
    args.IsValid = false;
}

클라이언트 측 유효성 검사 이벤트:

function TextBoxDCountyClient(sender, args) {
    args.IsValid = false;
    alert("test");
}

적어도 서버 측 검증이 시작될 것이라고 생각했지만 아닙니다. 이전에는 이런 일이 없었습니다.이것은 정말 저를 당황하게 했습니다.

출력을 살펴보니 ASP.NET이 클라이언트 측 기능을 인식하고 있습니다.

ASP.NET JavaScript 출력:

var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] : document.getElementById("ctl00_ctl00_content_content_CustomValidator2");

ctl00_ctl00_content_content_CustomValidator2.controltovalidate = "ctl00_ctl00_content_content_TextBoxDTownCity";

ctl00_ctl00_content_content_CustomValidator2.errormessage = "Delivery Town or City required";

ctl00_ctl00_content_content_CustomValidator2.display = "Dynamic";

ctl00_ctl00_content_content_CustomValidator2.evaluationfunction = "CustomValidatorEvaluateIsValid";

ctl00_ctl00_content_content_CustomValidator2.clientvalidationfunction = "TextBoxDTownCityClient";

렌더링된 사용자 지정 검증자:

<span id="ctl00_ctl00_content_content_CustomValidator2" style="color:Red;display:none;">Delivery Town or City required</span> 

클라이언트와 서버 측 검증이 모두 실행되지 않는 이유에 대해 설명할 수 있는 사람이 있습니까?

편집: 잘못된 기능에 타이포를 붙였는데, 문제는 여전히 같습니다.

마지막 주석에 대한 또 다른 업데이트입니다. 텍스트 상자는 비워둘 수 없습니다.저는 이것을 시험해 보았지만 사실이 아닙니다.빈 페이지에서 CustomValidator가 클라이언트 측 유효성 검사 기능을 실행했지만 값이 없습니다.

<asp:TextBox ID="TextBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" 
ErrorMessage="CustomValidator" ClientValidationFunction="TextBoxDAddress1Client"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

사용:

<asp:CustomValidator runat="server" id="vld" ValidateEmptyText="true"/>

빈 필드의 유효성을 검사합니다.

두 개의 검증자를 추가할 필요가 없습니다!

당신의.CustomValidator다음과 같은 경우에만 발사됩니다.TextBox비어 있지 않습니다.

비어 있지 않은지 확인해야 할 경우에도 마찬가지입니다.

참고: 입력 컨트롤이 비어 있으면 유효성 검사 기능이 호출되지 않으며 유효성 검사가 성공합니다.RequiredFieldValidator 컨트롤을 사용하여 사용자가 입력 컨트롤에 데이터를 입력하도록 합니다.

편집:

만약 당신이CustomValidator를 지정합니다.ControlToValidate그러면 컨트롤이 비어 있지 않은 경우에만 유효성 검사 함수가 호출됩니다.

지정하지 않은 경우ControlToValidate그러면 매번 유효성 검사 기능이 호출됩니다.

이렇게 하면 문제에 대한 두 번째 가능한 해결책이 열립니다.별도로 사용하는 것보다RequiredFieldValidator당신은 생략할 수 있습니다.ControlToValidate의 속성CustomValidator다음과 같은 작업을 수행하도록 유효성 검사 기능을 설정합니다.

클라이언트 사이드 코드(Javascript):

function TextBoxDCountyClient(sender, args) {
    var v = document.getElementById('<%=TextBoxDTownCity.ClientID%>').value;
    if (v == '') {
        args.IsValid = false;  // field is empty
    }
    else {
        // do your other validation tests here...
    }
}

서버 측 코드(C#):

protected void TextBoxDTownCity_Validate(
    object source, ServerValidateEventArgs args)
{
    string v = TextBoxDTownCity.Text;
    if (v == string.Empty)
    {
        args.IsValid = false;  // field is empty
    }
    else
    {
        // do your other validation tests here...
    }
}

제 웹 양식에서 클라이언트 측 유효성 검사가 전혀 실행되지 않았고 이유를 알 수 없었습니다.자바스크립트 함수의 이름이 서버 컨트롤 ID와 동일하다는 것이 문제였습니다.

그러니 당신은 할 수 없어요...

<script>
  function vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="vld" />

하지만 이것은 효과가 있습니다.

<script>
  function validate_vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="validate_vld" />

내부 .NET Javascript와 충돌하는 것 같습니다.

또한 유효성 검사 그룹 속성이 설정되어 있고 다음을 통해 명시적으로 호출되지 않은 경우 유효성 검사가 실행되지 않으므로 유효성 검사 그룹을 사용하지 않는지 확인합니다.

 Page.Validate({Insert validation group name here});

포스트백을 발생시키는 컨트롤의 CauseValidation이 true로 설정되어 있고 할당된 유효성 검사 그룹이 없는지 확인했습니까?

이 행동의 원인이 무엇인지 잘 모르겠습니다.

클라이언트 측 유효성 검사가 잘못되면 서버 측 유효성 검사가 실행되지 않고 포스트백이 전송되지 않습니다.

당신은 통과되지 않는 다른 검증이 있지 않습니까?

측 검사가 .ClientValidationFunction="TextBoxDTownCityClient"에서는 그고이이붙름함찾것을입다니수를은라는 이름의 .TextBoxDTownCityClient 검사으로, 은 유성검함수로그, 함이은름수나사러이어야 합니다.TextBoxDAddress1Client

(네가 쓴 대로)

ControlToValidateLukeH에 대한 정보를 주셔서 감사합니다.

제 코드에서 제가 하려고 했던 것은 텍스트 필드 B가 특정 값을 가질 때 일부 텍스트 필드 A에 텍스트가 있는지 확인하는 것이었습니다.그렇지 않으면 A이(가) 비어 있거나 다른 것일 수 있습니다.ControlToValidate= 제거"제 마크업에 있는 A"가 문제를 해결해 주었습니다.

건배!

언급URL : https://stackoverflow.com/questions/701029/asp-net-custom-validator-client-side-server-side-validation-not-firing

반응형