UFO ET IT

포스트 백에서 유효성 검사 요약에 오류 메시지를 추가하려면 어떻게해야합니까?

ufoet 2020. 12. 14. 20:25
반응형

포스트 백에서 유효성 검사 요약에 오류 메시지를 추가하려면 어떻게해야합니까?


두 가지 질문 :

사용자가 제출을 클릭 할 때 포스트 백에서 유효성 검사 요약에 오류 메시지를 추가하려면 어떻게해야합니까?

내장 된 .net 유효성 검사 컨트롤을 사용하여 특정 텍스트 상자를 강조 표시 할 수도 있습니까?


CustomValidator 컨트롤을 동적으로 만들고 Page.Validators 컬렉션에 직접 추가합니다.

Dim err As New CustomValidator
err.ValidationGroup = "MyGroup"
err.IsValid = False
err.ErrorMessage = "The password is invalid"
Page.Validators.Add(err)

CustomValidator를 태그에 추가하는 것과 달리이 메서드를 사용하면 서버 측 비즈니스 논리를 기반으로 임의의 오류 메시지를 원하는만큼 추가 할 수 있습니다.

페이지에 직접 추가 할 수도 있지만 따라야 할 몇 가지 규칙이 있습니다.

  1. 유효성 검사 그룹의 컨트롤과 동일한 이름 지정 컨테이너에 컨트롤을 추가해야합니다.
  2. 유효성 검사 메시지가 페이지의 임의의 위치에 표시되지 않도록하려면 특정 컨테이너에 유효성 검사기를 추가하거나 CSS 클래스 또는 스타일을 사용하여이를 억제해야합니다.

또한 사용자 지정 클래스를 만들고 IValidator를 구현 하여 코드 한 줄로 메시지를 추가 할 수 있지만이 메서드는 유효성 검사 그룹을 지원하지 않습니다.

Anders Fjeldstad의 제안에 따라 여기에 편리한 확장 방법 세트가 있습니다.

Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices

Public Module PageExtensions

    <Extension()> _
    Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String)
        p.AddValidationError(errorMessage, String.Empty)
    End Sub

    <Extension()> _
    Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String, ByVal validationGroup As String)
        Dim err As New CustomValidator
        err.ValidationGroup = validationGroup
        err.ErrorMessage = errorMessage
        err.IsValid = False
        p.Validators.Add(err)
    End Sub

End Module

사용자 지정 유효성 검사기를 추가하고 수동으로 속성 IsValidErrorMessage속성을 설정합니다 . 다음과 같습니다.

<asp:panel ID="ErrorsPanel" runat="server" CssClass="ErrorSummary">
    <asp:CustomValidator id="CustomValidator1" runat="server" 
        Display="None" EnableClientScript="False"></asp:CustomValidator>
    <asp:ValidationSummary id="ErrorSummary" runat="server" 
        HeaderText="Errors occurred:"></asp:ValidationSummary>
</asp:panel>

뒤에있는 코드에서 :

//
// Update the database with the changes
//
string ErrorDetails;
if (!Db.Update(out ErrorDetails))
{
    CustomValidator1.IsValid = false;
    CustomValidator1.ErrorMessage = ErrorDetails;
}

NightOwl888의 좋은 아이디어에 대한 약간의 확장은 다음과 같습니다.

public class ValidationError : CustomValidator
{
    public ValidationError(string group, string msg)
        : base()
    {
        base.ValidationGroup = group;
        base.ErrorMessage = msg;
        base.IsValid = false;
    }
}

public static class PageExtensions
{
    public static void ErrorMessage(this Page page, string group, string msg)
    {
        page.Validators.Add(new ValidationError(group, msg));
    }
}

오류 메시지를 표시하고 싶을 때마다 Page.ErrorMessage; 메커니즘은 그가 제안한 것과 동일합니다.


Well all you need to do is create a Custom Validator and add it to the Validator collection of your page, whenever the condition to do so arises.

CustomValidator cv = new CustomValidator();

if(condition)
{
cv.IsValid = false;
cv.ErrorMessage = "This Catalog Data already exists.";
cv.ValidationGroup = "InputList";
this.Page.Validators.Add(cv);
}

NOTE: Dont forget to specify the ValidationGroup, or the error message is not going to be displayed inspite of the custom validator being added to your page. And ya, if you do get an answer to your 2nd question(highlighting textbox) do post it!


To add error message on validation summary you can use EnableClientScript property of ValidationSummary and the other validation controls. Set EnableClientScript to false all of them :

<asp:ValidationSummary
HeaderText="You must enter a value in the following fields :"
DisplayMode="BulletList"
EnableClientScript="false"
runat="server"/>

For highlighting a control, no it's not possible with current controls.

But I put my validation controls near the related controls, and I set their Text property as "*". Then if the validation fails, it appears near failed control.

Maybe you can use custom validator to highlight the failed control. But you should write your own implementation.

참고URL : https://stackoverflow.com/questions/777889/on-postback-how-can-i-add-a-error-message-to-validation-summary

반응형