2013-03-28 10 views
2

asp.net mvc 4 응용 프로그램에 jQuery 애니메이션 로더를 넣으려고합니다. 사용자가 제출 버튼을 클릭하면 흰색 화면이 전체 화면을 따라 잡을 것이므로 잠시 기다려주십시오. 이것은 모두 작동합니다. 문제가있는 부분은 양식에 유효성 검사 오류가있을 때 클라이언트 측 유효성 검사가 실행되고 jquery 로더 화면 뒤에 갇혀 있다는 것입니다. 그래서 같은 로더를 호출하고 있습니다 :자바에서 ModelState에 액세스

 $(function() { 
      $("#submitbtn").click(function() { 
       $("#loading").fadeIn(); 
      }); 
     }); 

을 내 $(document).ready(.... 기능에. 내 첫번째 생각은

 @if (ViewData.ModelState.IsValid) 
     { 
      <text>$(function() { 
       $("#submitbtn").click(function() { 
        $("#loading").fadeIn(); 
       }); 
      });</text> 
     } 

을 사용했지만,이 페이지가로드를 유효하고 때 (나는 알았어 야 내 나쁜)을 기록합니다. 이제 나는 잃어 버렸고, 어떻게해야할지 모르겠다. 누구든지 도와 줄 수 있습니까?

+0

왜 ModelState에 액세스해야합니까? 제출 버튼을 클릭 할 때마다 로더를 보여주고 싶습니까? 그리고 클라이언트 측 유효성 검사가 있습니다. 그렇다면 클라이언트 측 유효성 검사가 성공하면 로더를 표시하는 것만으로 충분하지 않거나 시나리오를 오해 한 것일까 요? –

+0

@vonv. 그게 내가 원하는 것인데, 어떻게해야합니까? – hjavaher

답변

2

나는 당신의 문제를 어떻게 이해했는지에 근거하여 그것에 대해 이야기 할 것입니다. 그래서, 당신은 : 제출 한 게시물이 다시 아닌 아약스 포스트이기 때문에

$(function() { 
     $("#submitbtn").click(function() { 
      $("#loading").fadeIn(); 
      if (validFormInputs()) {     
       yourForm.submit(); 
      } 
      else { 
       // hide the laoder again 
       $("#loading").fadeOut(); // or .hide or however you want to hide it 
      } 
     }); 
    }); 

이제 로더, 제출 액션이 너무 빨리 발생하는 모든 경우에 표시되지 않을 수 있습니다. 서버 쪽에서 클라이언트 쪽 유효성 검사에서 잡히지 않은 오류가있는 경우보기를 다시 반환 할 수 있으며 자바 스크립트에서 특별한 작업을 수행 할 필요가 없습니다. 그래서 방법은 다음과 같이 보일 수 있습니다 :

[HttpPost] 
public ActionResult Edit(YourModel input) { 
    if (!ModelState.IsValid) { 
     return View(input); 
    } 

    // do something here, redirect or return the view again 
} 

다시 말하지만,이 코드는 다시 게시물에 대한 아약스 게시물에 대한 행동과 하지 떨어져 있다는 사실을 양지하시기 바랍니다.

UPDATE : 그래서 기본적으로 여기 단계 :

  1. 캡처 $("#submitbtn").click(function()...
  2. 이보기 당신의 제출 버튼의 클릭 이벤트 로더 $("#loading").fadeIn();
  3. 는 클라이언트 측 유효성 검사를 수행 validFormInputs()
  4. 유효성 검사가 실패하면 로더를 숨김 $("#loading").fadeOut();

    4a. 당신이 검증 플러그인을 사용하거나 어떤 경우에, 당신은 확인 후 성공 서버 측 유효성 검사가 실패하면 당신은 당신이보기를 반환 한 다음 폼 yourForm.submit();

  5. 에게 제출하면 오류 메시지

  6. 를 표시해야 가정 return View(input);

+0

이것은 정확히 내가 바라던 논리입니다. 그 말로는 작동하지 않습니다. 로더는 클라이언트 측 유효성 검사 메시지를 그곳에 그냥 둡니다. 또한,'form.submit(); 대신에'return true;'(호기심)을 가질 수 있습니까? – hjavaher

+0

어떤 부분이 작동하지 않습니까? 따라야 할 논리를 보여주기 위해 대답을 업데이트 할 것입니다. –

+0

ok, 콘솔에'validFormInputs'가 정의되어 있지 않은 것으로 표시됩니다. 그것은 내장 된 함수입니까, 아니면 쓸 필요가 있습니까? – hjavaher