2012-04-30 2 views
3

소개혼합 마이크로 소프트 MVC 아약스 및 검증 헬퍼

이 포스팅은 기본 JQuery와 아약스와 마이크로 소프트 MVC 도우미를 혼합에 관한 것입니다. 난 길을 따라 발생하는 주요 문제가 있었다 :

  1. 더블 포스트 제출
  2. @ Html.ValidationMessageFor

요구 사항

  1. 나는이 속성 출력하지 양식 유효성 확인 및 게시 요구 사항 (id = "my-form")

  2. 양식이 검증으로 장식 된 모델에 바인딩 내가 눈에 거슬리지 편익 내가 클라이언트 측 및 서버 측 유효성 검사 (모두 필요

  3. 을 활용하는 등 @ Html.ValidationMessageFor 같은 헬퍼 메소드의 사용을 만들고 싶어 그래서 속성 서버 측 데이터베이스와 고유 한 이름 확인)

  4. 추가 양식 데이터를 추가하기 위해 양식을 제출할 때 일부 클라이언트 측 처리를 수행해야합니다.

반복 단계

내가 더 네이티브 JQuery와 진형과 아약스 양식을 작성하기 위해 마이크로 소프트 도우미를 사용하여 1

단계 :

@using (Ajax.BeginForm(... 

모든 가공 한을 광고 한 것과 같이. 이것은 나를 눈에 띄지 않는 유효성 검사로했지만 사용자 정의 양식 데이터 요구 사항을 충족시키지 못했습니다.

그래서 제출 프로세스를 재정의한다고 생각했습니다.

STEP 내가 새로운 이벤트 핸들러 후크 준비가 내 문서에서 2

:

function SubmitForm(e) 
{ 
    // Suppress normal event behaviour 
    e.preventDefault(); 

    // Validate the form 
    var valid = $("#my-form").validate(); 
    if (valid.errorList.length > 0) 
     return; 

    // Collect up form data manually 
    var formData = ...(code removed for clarity) 

    // Display animated gif 
    $("#ajax-loader").css("display", "inline") 

    // Post Form 
    $.post(
      '@Url.Action("MyAction", "MyController")', // url 
      formData,         // data 
      SuccessFunction        // success 
     ) 
     .error(ErrorFunction);       // error 
} 
:
$(document).ready(function() 
{ 
    // Rebind validators 
    $.validator.unobtrusive.parse('#my-form'); 

    // Hook up submit event 
    $("#my-form").submit(SubmitForm); 
}); 

그리고 내에서

내가 내 자신의 폼 데이터 처리를 할 수있는 기능을 제출을

이제 장면이 설정되었습니다.

문제

하나의 문제는 아약스의 두 가지 유형을 혼합하고있어 것입니다. 이것은 두 번 게시물로 연결됩니다. 바이올린을 사용하면 게시물이 두 번 표시됩니다. (마이크로 소프트 양식 선언과 jquery 게시판에 대해 한 번) 2 개의 처리기가 연결 되었기 때문입니다. 인터넷 검색을 조금만하면 일부 사람들이 jquery를 사용하여 하나의 핸들러를 제거하지만 모두 조금 어수선 해 보입니다.

이제

<form id = "my-form"> 
    ... 
</form> 

문제점 @ STEP 3

그래서 간단한 폼 태그에 @using (Ajax.BeginForm (... 구문 변경 Html.ValidationMessageFor는 그 일을하지 않습니다. 방화 광을 사용하여 양식 입력에 더 이상 유효성 검사 특성이 적용되지 않습니다.

@ Html.ValidationMessageFor는 양식 도우미와 함께 작동하는 것처럼 보입니다.

내가 두 번 제출을 얻을 수 있기 때문에 내가 ... Ajax.BeginForm을 (사용할 수 없습니다

4 단계

그래서 내가 다음에 사용

:.

@using (Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { id = "my-form" })) 
{.... 

내가 사용을 Html.BeginForm은 순전히 My @ Html.ValidationMessageFor를 만들기 위해 사용합니다. 사용자 지정 이벤트 처리기가 양식 제출 프로세스를 대신하기 때문에 "MyAction"및 "MyController"매개 변수가 모두 중복됩니다.

해결

이제 모든

  1. 없음을 두 번 제출을 작동하지 않을 것
  2. 겸손한 유효성 검사를 사용하여 @ Html.ValidationMessageFor
  3. 사용자 정의 폼 처리/제출
  4. 클라이언트 및 서버 측 유효성 검사

내 질문.

이 방법이 맞습니까? 나는이 라인을 따라 누구든지 elses 경험을 듣고 싶습니다.

감사

답변

0

일반적으로 이러한 유형의 시나리오에 나는 접근 방식은 Fluent Validation에서 제안 좋아한다. 이제 JQuery로 확인할 수있는 클라이언트의 유효성 검사를 생성하고 서버 끝에서 강제 유효성 검사를 생성/생성 할 수 있습니다. 클래스에 규칙을 정의하고 예제에서와 같이 정의한 다음 해당 클래스를 사용하여 유효성을 검사합니다. 따라서 서버 측에서 검사 할 것입니다. 저는 일반적으로 html을 쓰지 않기 위해 아약스를 사용합니다. 대부분 닫는 괄호와 몇 가지 일을 잊어 버릴 것입니다. 그래서 도우미는 좋지만 Ajax를지지하지는 않습니다. Beginform. 간단한 Beginform이 좋습니다.

나는 일반적으로 엄지 법칙을 따르고,보기에는 단순하고 명확한 HTML 또는 헬퍼가 있어야하며, 중첩 된 div 및 기타 항목을 갖기 위해 노력했습니다.

이 주제에 대해 더 자세한 정보가 필요하면 알려주십시오. 이 웹에서 발견 할 수있는 좋은 기사는 거의 없습니다.원하는 경우 공유 할 수 있습니다.