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비어 있지 않습니다.
비어 있지 않은지 확인해야 할 경우에도 마찬가지입니다.
편집:
만약 당신이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
'programing' 카테고리의 다른 글
| 마리아에서 UDF를 제약 조건으로 사용할 수 없습니다.DB (0) | 2023.06.23 |
|---|---|
| 스프링 부트 테스트에서 와이어모크 랜덤 포트로 속성 설정 (0) | 2023.06.23 |
| 조건부 연산자 권리가 연관성이 있는 이유는 무엇입니까? (0) | 2023.06.23 |
| 활동에서 원래 추가된 창이 누출되었습니다. (0) | 2023.06.23 |
| MongoDB 노드 드라이버가 인스턴스 풀을 생성하는 동안 오류가 발생하는 이유는 무엇입니까? (0) | 2023.06.03 |