2011-03-23 1 views
0

에서 새 창을 엽니 다선택적으로 나는 다음을 수행하고자하는 ASP.Net MVC 2 응용 프로그램에서 컨트롤러 액션

  • 다른보기로 사용자를 리디렉션 : 양식 게시물을 처리하는 행동에 내가 원하는

    : 현재 브라우저 창
  • 열기 다른 정보를 보여주는 새로운 창 (다른보기)
다음의 jQuery 스크립트를 양식 요소에 target="_blank" 속성을 설정하고 추가 쉽게 수행 할 수 있습니다

에서

$(function() { 
    $("form").submit(function() { 
     window.location = "..."; 
    }); 
}); 

조치 핸들러가 리턴 한보기는 양식이 게시되는 새 창에서 렌더링됩니다. 작업을 실행할 때 어떤 서비스 계층 오류가없는 경우

  • , 다음 위의 작업을 수행

    :

    그러나,의는 조금 까다 만들어 보자.

  • 조치를 실행할 때 서비스 계층 오류가있는 경우 새 창을 열지 마십시오. 조치에 의해 리턴 된보기가 양식이 있던 첫 번째 창에 표시되어야합니다.

예 : 모든 항목이 정상이면 pdfDocument가 생성되고 pdf가 새 창에 표시되어야한다고 가정합니다.

[HttpPost] 
public ActionResult SomeAction(FormCollection form) 
{ 
    var serviceMethodParams = ... // convertion from the form data somehow 

    MemoryStream pdfDocument = null; 

    if (!serviceLayer.DoSomething(serviceMethodParams, out pdfDocument)) 
    { 
     // Something went wrong, do not redirect, do not open new window 
     // Return the same view where error should be displayed 
     return View(...); 
    } 

    // The service method run ok, this must be shown in a new window and the origal window must be redirected somewhere else 
    return File(pdfDocument.ToArray(), "application/pdf"); 
} 

참고 서비스가 true를 반환하지만 서비스가 false를 반환하는 경우 오류를 보여주는 뷰가 새 창에 표시되고 원래 창은 다른 곳 리디렉션 원래 솔루션 잘 작동.

답변

1

이 경우 더 나은 옵션은 사용자가 가리킬 수있는 특정 문서에 대한 URL 만 반환하는 것이고, 성공하면 Ajax 호출은 작업 메서드에서 반환 된 URL을 가져 와서 해당 URL을 가리키는 새 창. 오류가 발생하면 오류 또는 일부 등을 표시 할 수 있습니다. 기본적으로 데이터는 Json 반환 값으로 접혀 있습니다.

아약스 호출 외에 가장보기 좋은 패턴은 뷰를 다시 렌더링 한 다음 일부 시작 자바 스크립트를 첨부하여 해당 특정 URL을 가리키는 새 창을 여는 것입니다.

관련 문제