2012-08-09 3 views
2

지난 1.5 년 동안 ASP.net MVC에서 일했습니다. 서버 측 유효성 검사를 위해 엔터프라이즈 애플리케이션 블록을 사용한 곳. 뷰 모델이 뷰의 컨트롤과 유효성 검사에 바인딩되는 방식을 좋아했습니다. 하지만 지금은 MVC없이 순수하게 웹폼 인 프로젝트에서 일하고 있습니다.ASP .net 유효성 검사 기술

여기서 jQuery는 클라이언트 측 유효성 검사에 사용되며 서버 측 유효성 검사가 전혀 없습니다. 나는 서버 측 유효성 검사의 중요성을 강조하고 있으며 동일한 것을 위해 엔터프라이즈 라이브러리를 사용할 계획이었다.

(내가 최근에 ASP.NET MVC에서 근무했기 때문에) 몇 가지 이유가 있습니다.

내 웹 양식 응용 프로그램에는 필자의 검증에 반드시 클라이언트 측과 서버 측 모두 동일한 논리가 포함됩니다. 또는 일반적으로 ASP .net 웹 양식의 유효성을 코딩하는 모범 사례는 무엇입니까?

나는 널리 받아 들여지는 관례를 따르고 싶었다. 또한 엔터프라이즈 라이브러리보다 나은 웹 폼 유효성 검사를위한 새로운 개념이 있습니다. 견본은 나를 이해하는 데 도움이 될 것입니다.

답변

1

나는 클라이언트 측 검사 외에 서버 측 검사가 좋은 생각이라고 생각합니다 (특히 외부에서 접하는 응용 프로그램의 경우). 특히 텍스트 상자에주의해야합니다. 사용자가 스크립트를 종료하고 클라이언트 측 스크립트를 완전히 우회 할 수 있음을 기억하십시오.

ServerValidate 이벤트를 발생시키는 사용자 지정 검사기 컨트롤을 사용하여 서버 쪽 유효성 검사를 구현하기는 쉽습니다.

필자는 엔터 프라이즈 라이브러리를 사용하지 않았으므로이 라이브러리가 제공하는 유효성 검사 루틴에 대해서는 아무 것도 대답 할 수 없습니다.

1

CustomValidators를 사용할 수 있습니다. 그들은 내가 좋아하는 것입니다!

required="required"과 같은 HTML5 속성을 사용하는 경우 무료로 클라이언트 측 피드백을받을 수 있습니다.

당신과 같이 서버 측 유효성 검사를 수행도를 이용할 수있다 : 함수 뒤에

<asp:ValidationSummary runat="server" id="vSummary" /> 

<asp:TextBox runat="server" id="txtReq" required="required" /> 
<asp:DropDownList runat="server" id="ddlReq" required="required"> 
    <asp:ListItem text="..." value="" /> 
    <asp:ListItem text="Yes" value="1" /> 
    <asp:ListItem text="No" value="0" /> 
</asp:DropDownList> 

<asp:Button runat="server" id="cmdSubmit" text="Submit" /> 

코드 :

private void buildRequiredWebControls(List<WebControl> lst, Control c) 
{ 
    if (c is WebControl) 
     if (String.Compare((c as WebControl).Attributes["required"] ?? String.Empty, "required", true) == 0) 
      lst.Add((c as WebControl)); 

    foreach (Control ch in c.Controls) 
     buildRequiredWebControls(lst, ch); 
} 

/* --------------------------------------------- */ 

private Boolean addAllFieldsRequired(List<WebControl> controls) 
{ 
    foreach (WebControl w in controls) 
    { 
     if (w as TextBox != null) 
      if (String.IsNullOrWhiteSpace((w as TextBox).Text)) return false; 

     if (w as DropDownList != null) 
      if (String.IsNullOrWhiteSpace((w as DropDownList).SelectedValue)) return false; 
    } 
    return true; 
} 

/* --------------------------------------------- */ 

private void cmdSubmit_Click(object sender, EventArgs e) 
{ 
    vSummary.ValidationGroup = "StackOverflow"; 
    Page.Validate("StackOverflow"); 

    List<WebControl> requiredFields = new List<WebControl>(); 
    this.buildRequiredWebControls(requiredFields, this); 

    Page.Validators.Add(new CustomValidator() 
    { 
     IsValid = this.addAllFieldsRequired(requiredFields), 
     ErrorMessage = "Please complete all required fields.", 
     ValidationGroup = "StackOverflow" 
    }); 

    if (Page.IsValid) 
    { 
     //Good to Go on Required Fields 
    } 
} 

수동에 삽입하는 것입니다 매우 단조로운 대안을 친다 모든 제어 후 html :

<asp:ValidationSummary runat="server" id="vSummary" ValidationGroup="StackOverflow" /> 

<asp:TextBox runat="server" id="txtReq" required="required" /> 
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtReq" ErrorMessage="Please Fill Out Required Field" Text="*" ValidationGroup="StackOverflow" /> 

<asp:DropDownList runat="server" id="ddlReq" required="required"> 
    <asp:ListItem text="..." value="" /> 
    <asp:ListItem text="Yes" value="1" /> 
    <asp:ListItem text="No" value="0" /> 
</asp:DropDownList> 
<asp:RequiredFieldValidator runat="server" ControlToValidate="ddlReq" ErrorMessage="Please Fill Out Required Field" Text="*" ValidationGroup="StackOverflow" /> 

<asp:Button runat="server" id="cmdSubmit" text="Submit" /> 
관련 문제