ASP.NET에서 모든 컨트롤의 유효성 검사 그룹 속성을 전 세계적으로 설정하는 가장 좋은 방법?

StackOverflow https://stackoverflow.com/questions/1424577

  •  07-07-2019
  •  | 
  •  

문제

대규모 웹 응용 프로그램에서 상당히 재사용되는 양식 항목을 사용하여 사용자 컨트롤이 있으며,이 시점까지 유효하지 않은 양식 제출시 유효성 검사 요약은 사용자 컨트롤을 소비하는 .aspx에 의해 처리됩니다.

이제 각 양식 항목 컨트롤 (텍스트 상자, 목록, 유효성 검사기 등)에 대해 런타임에 ValidationGroup 속성을 설정해야합니다. 각 컨트롤을 설정하여 수동으로 수행하는 대신 사용자 컨트롤의 모든 컨트롤을 반복하고 해당 컨트롤에 유효성 검사 그룹 속성이 있는지 감지하고 그 방식으로 값을 설정하는 데 관심이 있습니다.

이 같은:

For Each ctrl As System.Web.UI.Control In Me.Controls
   ' so now what is the proper way to detect if this control has the ValidationGroup property
Next

vb.net 또는 c#의 코드 샘플이 나에게 작동합니다. 많은 감사합니다!

도움이 되었습니까?

해결책

USERCONTROL은 유효성 검사 그룹 속성을 자체로 올바르게 설정하는 속성을 노출해야합니다.

.aspx의 제어 마크 업 :

<ctl:yourcontrol id="whatever" runat="server" YourValidationGroupProp="HappyValidationName" />

CONTROL CODE-BEHIND .ASCX :

 protected override void OnPreRender(EventArgs e)
 {
     someControl.ValidationGroup = YourValidationGroupProp;
     someControl1.ValidationGroup = YourValidationGroupProp;
     someControl2.ValidationGroup = YourValidationGroupProp;
     //......etc
 }    

 public string YourValidationGroupProp{ get; set; }

다른 팁

예를 들어 문자 그대로의 사용자 정의 컨트롤 상속을 만듭니다. 이 컨트롤은 도우미가 될 것입니다.

당신은 그것을 페이지에 삽입하고, 당신을 위해 모든 더러운 일을하도록합니다. 예를 들어, 논리를 기준으로 작성하는 데 많은 시간이 걸리는 출력 코드와 일단 완료되면.

해당 자동 코드를 가져 오십시오 (다른 컨트롤에 의해 매번 수행 한 경우 가중치가 무거운 중량 일 경우 도우미 컨트롤을 제거하고 원하는 곳마다 새 코드를 하드 코드로 세웁니다.

이런 식으로 당신은 컴퓨터가 원하는 코드를 원하는 코드를 알아 내고 일반적인 방법으로 문제를 해결함으로써 어려움을 겪는 모든 하드 코드 속도를 얻음으로써 모든 실수를 피합니다.

나는 단지 같은 것을 찾아서 갑자기 나를 때렸다. 이 메소드를 다른 것들에 사용합니다 [모든 컨트롤을 스캔하고 일부 init 코드를 출력]이 방법을 사용하여 쉽게 수행 할 수 있다고 생각합니다!

방금 썼고 당신과 공유 할 것입니다

public class ValidationCodeProducerHelper : Literal
{
    // you can set this in the aspx/ascx as a control property
    public string MyValidationGroup { get; set; }

    // get last minute controls
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        // start scanning from page subcontrols
        ControlCollection _collection = Page.Controls;
        Text = GetCode(_collection).Replace("\r\n", "<br/>");
    }

    private string GetCode(Control _control)
    {
        // building helper
        StringBuilder _output = new StringBuilder();

        // the logic of scanning
        if (_control.GetType().GetProperty("ValidationGroup") != null && !string.IsNullOrEmpty(_control.ID))
        {
            // the desired code
            _output.AppendFormat("{0}.{1} = {2};", _control.ID, "ValidationGroup", MyValidationGroup);
            _output.AppendLine();
        }

        // recursive search within children
        _output.Append(GetCode(_control.Controls));

        // outputting
        return _output.ToString();
    }

    private string GetCode(ControlCollection _collection)
    {
        // building helper
        StringBuilder _output = new StringBuilder();
        foreach (Control _control in _collection)
        {
            // get code for each child
            _output.Append(GetCode(_control));
        }
        // outputting
        return _output.ToString();
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top