2011-05-03 3 views
5

사용자가 블로그에 글을 올리려면 해당 필드를 채우고 submit을 클릭하십시오.MVC3에서 여러 게시물을 방지하는 방법은 무엇입니까?

사이트가 느리게 실행 중입니다. 다시 클릭하고 다시 클릭합니다.

마지막으로 저장되었지만 이제는 그의 게시물을 확인하고 4 개의 게시물을 봅니다.

어떻게 이런 일이 발생하지 않도록 할 수 있습니까? 사용자가 다음 번 클릭을 위해 do nothing 또는 abort previous을 입력하고 새 게시물을 시작하기를 원할 때 클릭하면 더 적합한 의미로 또는 권장됩니다.

@using (Ajax.BeginForm(...)) 
{ 
} 
+0

아무 것도하지 않거나 이전 작업을 중단하고 새 작업을 시작하십시오. – BrunoLM

+0

jQuery를 사용하고 있습니까? – hunter

+0

@hunter 예 jQuery를 사용하고 있습니다. – BrunoLM

답변

17

가장 쉬운 방법과 형태로

이가 클릭 한 후 버튼을 제출하지 않도록하는 것입니다 달성하기 위해.

이보기에 다음과 같은 자바 스크립트 (jQuery를) 추가

$(function() { 
    $('input[type="submit"]').click(function() { 
     $(this).attr('disabled', 'disabled'); 
    }); 
}); 

이 완료 아약스 요청 후 버튼을 가능하게 기억이 켜지지 경우 :

$('input[type="submit"]').removeAttr('disabled'); 

UPDATE :

그것은 비활성화하는 것이 좋습니다 사용자가 입력 버튼을 눌러 양식을 제출할 수 있기 때문에 양식 제출 이벤트 핸들러의 제출 버튼 :

$(function() { 
    $('form').submit(function() { 
     $('input[type="submit"]', this).attr('disabled', 'disabled'); 
    }); 
}); 
+0

이렇게하면 ** 클릭이 진실로 성공하지 못했을 때라도 게시물이 제출되지 않습니다 **. 나는'서버 측'체크를 선호한다. – Aliostad

+0

@Aliostad : 또한 좋은 지적입니다. 내 대답은 사용자 인터페이스에만 영향을 주며 여러 요청으로부터 보호하지 않습니다. – bniwredyc

+1

비슷한 질문과 대답도 JQuery를 사용하지만 양식이 유효한 경우 고려 ... http://stackoverflow.com/questions/6080360/prevent-multiple-form-submits-in-mvc-3- with 유효성 검사 –

3

많은 솔루션이 있습니다.

하나는 이 게시물 데이터베이스에 삽입되어 숨겨진 필드로 임의 GUID 와 형태를 만드는 것입니다. 삽입하기 전에 GUID 이 이미 존재하는지 확인합니다.

또는 (클라이언트 측에 숨겨진 필드로 전송되는) DateTime 또는 "게시 제목"과 같은 실제 속성을 사용할 수 있습니다.

0

사용자가 게시 영역에 대한 작업 링크를 클릭 한 순간 실제 게시물을 만들지 만 "상태"를 임시로 설정합니까? InsertOnSubmit()을 실행하면 해당 게시물이 즉시 게시물을 검색하고 편집하는 작업으로 리디렉션됩니다. 이것은 사용자가 알아 차리지 못할 정도로 빠르게 발생합니다. 따라서 사이트가 느리고 "제출"을 여러 번 클릭하면 같은 레코드에 저장하는 새 레코드가 생성되지 않습니다. 내가 작업중인 작업 목록 응용 프로그램에서 프로세스를 사용하고 있습니다. 아래 코드를 참조하십시오.

Better Task List Ticket Controller

그것은 좋은 호텔 솔루션이 아닐 수도 있지만 당신을 위해 작동하는 창조적 인 솔루션을 발생할 수 있습니다.

+0

당신이 제공 한 링크가 더 이상 없습니다 –

+0

존 주셔서 감사합니다, URL을 고쳤습니다. –

0

내 표결은 ActionFilters입니다. This blog post에는 프로젝트에 들어가서 작업을 꾸미는 코드가 있습니다.

관련 문제