2011-01-20 3 views
0

사용자가 양식에 데이터를 저장할 때 다음 div (fadeIn/fadeOut을 통해)를 표시하려고합니다.성공적인 POST시 jQuery 페이드 인 표시

// Display a notification if the save is successful. 
$('<div class="save-alert">The current scenario has been saved.</div>') 
    .insertAfter($('#main')) 
    .fadeIn('slow') 
    .animate({ opacity: 1.0 }, 3000) 
    .fadeOut('slow', function() { 
    $(this).remove(); 
}); 

현재 Html.BeginForm 도우미를 사용하여 양식을 제출하고 있습니다. 이 때문에 내 전체 페이지가 게시되고 위의 알림을 표시 할 수 없습니다. Ajax.BeginForm을 사용할 수 있다는 것을 알았지 만 시나리오 저장 후 다른 문제 (즉, return RedirectToAction("Index", new { id = scenario.ScenarioID });을 수행 할 수 없음)가 발생합니다.

아무에게도 내가 시도 할 수있는 다른 제안이 있습니까?

답변

0

아약스 경로를 피하려고한다고 가정합니다. 그렇다면 메시지 문자열을 쿠키에 넣고보기에 메시지가 있는지 테스트하십시오. 메시지가 있으면 표시하십시오. 쿠키가 있으므로 성공적인 게시를 처리 한 후에 리디렉션을해도 메시지를 검색 할 수 있습니다. 메시지를 표시 한 후에 쿠키를 지우십시오!

우리 회사에서이 과정을 공식화했으며이를 "플래시"(Ruby on Rails와 비슷하거나 여전히 그렇듯이)라고합니다.

메시지 설정, 검색 및 표시 논리를 도우미 클래스에 래핑하여보기에서 해당 구현을 추상화 할 수 있습니다. 그렇게하면 쿠키, 뷰 데이터 또는 세션 값과 뷰 및 컨트롤러를 사용하여 동작을 변경할 필요가 없습니다.

+0

Ajax 경로는 사용하지 않아도되지만 몇 가지 주요 문제가 발생합니다. (내 게시물에서 말했듯이, 제출 후해야 할 RedirectToAction()을 수행 할 수 없습니다.) – JasCav

+0

내 접근 방식은 귀하의 경우에 사용할 수 있으며, 아약스를 사용할 필요가 없으며 여전히 리디렉션을 수행 할 수 있습니다. :) –

0

페이지를 다시로드하지 못하도록 백그라운드 게시물을 제공하려면 jquery.post()을 사용해야합니다.

http://api.jquery.com/jQuery.post/

+0

이것은 Ajax.BeginForm의 기능입니다. –

0

글쎄, 난 그냥 AJAX를 통해 그것을 제출 거부 및 수행

$('#form').submit(function() 
{ 
    return false; 

    $.post('test.php', $(this).serialize(), function(data) 
    { 
    //Do your stuff. Data is the POST response data. 
    }); 
}); 

행운을 빕니다!

+0

Ajax.BeginForm이하는 일입니다. –

+0

무엇입니까? 나는 이것이 jQuery라고 생각했다. – Blender

0

URL을 반환하고 클라이언트 측에서 리디렉션합니다. JsonResult 또는 기타를 사용하여 MVC의 데이터를 클라이언트에 다시 보낼 수 있습니다.

+0

그 방법에 대한 몇 가지 샘플 코드가 있습니까? – JasCav

+0

@ JasCav - 이것은 유사합니다. 귀하의 경우에는 대상 업데이트 ID 대신 성공 함수 만 사용할 수도 있습니다. http://www.hanselman.com/blog/ASPNETMVCPreview4UsingAjaxAndAjaxForm.aspx –

관련 문제