2011-01-13 2 views
13

Stephen Walther tip을 기반으로 Microsoft Excel 문서를 반환하는 ExcelResult 작업 결과가 있습니다. 기본적으로 스트림을 응답에 씁니다. VS 2010 디버깅 할 때 (ASP.NET 데브 서버), 그것을 잘 실행되지만 내가 IIS 6 상자를 실행할 때, 나는 다음과 같은 오류 얻을 그러므로뷰없이 MVC 컨트롤러 동작을 실행 하시겠습니까?

The view 'GenerateExcel' or its master was not found. The following locations were searched: ~/Views/Home/GenerateExcel.aspx ~/Views/Home/GenerateExcel.ascx ~/Views/Shared/GenerateExcel.aspx ~/Views/Shared/GenerateExcel.ascx

가 연관된보기가 없으며 파일을 , 그러나있을 필요는 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 단순히 대신 ActionResult의 무효 반환하여

UPDATE

, 나는 더 이상이 문제가 없습니다. ExcelResult를 반환하는 대신 출력 스트림에 쓰는 ExecuteResult 메서드를 명시 적으로 호출하고 있습니다.

전에

public ActionResult GenerateExcel() 
{ 
    return this.Excel(parameters); 
} 

그 후

public void GenerateExcel() 
{ 
ExcelResult excelResult = this.Excel(parameters); 
excelResult.ExecuteResult(null); 
} 

후, 나는 내 NTLM 인증으로 보안 문제가 있었다, 그러나 나는 그들이 돌아올 것으로 기대 의미 ('멀리 갔다'). 지금은 모든 것이 제대로 작동하고 있습니다.

+1

당신이하고있는 일 (어떤 코드 또는 무언가)을 보여주지 않고 잘못하고있는 것을 말하기가 약간 어렵다고 생각하지 않습니까? 불행히도 저는 텔레파시 기술이 없습니다. –

+0

기본적으로 링크의 코드를 볼 수 있습니다. 그것은 ExecuteResult 메서드가 출력 스트림에 쓰는 ExcelResult 인 ActionResult를 반환합니다. – DougJones

답변

13

있는지 확인 작업 방법은 ActionResult를 반환하지 않습니다

public void DoSomething() 
+3

아, 각각의 액션은 ActionResult를 반환하지 않아야합니다. 이 경우 그는 커스텀 액션 결과이지만 여전히 액션 결과 인 'ExcelResult'를 원합니다. –

+0

컨트롤러의 모든 public 메서드는 작업 메서드이며 적절한 URL로 호출 할 수 있습니다. 응답으로 스트림을 작성하는 동안 작동 할 수 있습니다. –

+0

다른 오류가 발생했습니다. 방금 첨부 된 Excel 문서 대신 빈 페이지가 보였습니다. 나는 Fiddler에서 NTLM windows 인증에 대해 401 액세스 거부 오류가 발생하는 것을 보았습니다. 다른 컨트롤러 작업 (보기 포함)은 훌륭하게 표시됩니다. – DougJones

0

내가 많은 세부 사항의 조치 결과에 대한 코드를 보지 않았다, 그러나 당신의 행동 결과에 문제가 있어야합니다. ActionResult 클래스와 달리 다른 액션 결과를 상속 받았습니까? 기지에 전화 했어? 실행 결과? 그렇다면 왜 그것이 그 견해를 찾고 있는지를 설명 할 것입니다. 다양한 파일 형식을 반환하는 몇 가지 사용자 지정 컨트롤러 동작을 만들었으며 절대로보기를 찾지 않습니다.

무효화에 대한 답변에 대한 의견에 동의합니다. 확실히 해킹입니다. 액션 내부에서 ExecuteResult를 호출하면 안됩니다. 기본적으로 컨트롤러 동작의 응답 스트림에 직접 쓰고 있습니다. 분명히 작동하지만 실제로 MVC 모델에 맞지 않습니다.

3

이것은 수백 또는 수천 개의보기가있는 시나리오에서 매우 유용합니다. 이 경우 우리는 수백 또는 수천 개의 컨트롤러 동작을 생성합니까? 물론 아닙니다, 그럼 어떻게 해결할 수 있습니까?

MVC 프레임 워크에서 컨트롤러 클래스에는 존재하지 않는 컨트롤러에서 동작을 호출하려고 할 때 (또는 일치하는 동작 메서드가없는 뷰를 요청할 때) 실행될 HandleUnknownAction() 메서드가 포함되어 있습니다 . 내가 믿는

enter image description here

, 이것은 귀하의 질문에 대답을 제공합니다.

관련 문제