2013-03-16 1 views
5

나는 ProductsController라는 컨트롤러가 있고 WebForm1.aspx라는 웹 폼이있는 인덱스 뷰를로드하는 데 인덱스 메서드를 사용합니다. 인덱스 뷰가 설정되었고 제대로 작동하고 있습니다. 이제 WebForm1.aspx의 내용을 표시하기 위해 인덱스 뷰에 iframe을 추가하려고합니다. 두보기 모두 MVC 프로젝트의보기/제품과 동일한 폴더에 있습니다.asp.net 웹 양식을로드 할 MVC 뷰의 iframe

<iframe src="/ProductsController/Index?WebForm1.aspx" width="1000" height="400"> 

    </iframe> 

내 조회수 /의 Web.config로 다음 설정 : 나는 다음과 같은 짓을

및 웹 양식 상속은 다음과 같습니다

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

그러나 iframe에 오류 메시지가 표시됩니다. "HTTP 404 - 찾고있는 리소스 (또는 해당 종속성 중 하나)가 제거되었을 수 있습니다. 이름이 변경되었거나 일시적으로 사용할 수 없습니다. "

나는 나의 Global.asax 파일에 다음 줄을 추가하는 것이 시도 :

RouteTable.Routes.RouteExistingFiles = true; 

을뿐만 아니라 실패

내가 iframe이이 하지만 빈 전체를 사용하는 것입니다 표시 얻는 유일한 방법 다음으로 실제 경로 :

<iframe src="C\:Folder1\Folder2\ ...\Views\Products\WebForm1.aspx" width="1000" height="400"> 

    </iframe> 

누군가가 왜 작동하지 않는지 설명 할 수 있습니까? 어떻게 작동 시키는가? 고맙습니다.

답변

1

Webform.aspx 파일의 실제 위치를 지정할 수 있습니다.

<iframe src="/FolderPath/WebForm1.aspx" width="1000" height="400"> 

    </iframe> 

귀하의 코드는 Webform1.aspx를 파일이 해당 디렉토리 구조 변경에 정말 경우 MVC 런타임이 "ProductsController가"라는 폴더와 "인덱스"

라는 하위 폴더에서보고하는 것이라고 asssumes src 특성은 src="/ProductsController/Index/WebForm1.aspx"

13

으로 표시됩니다. 일반적으로 브라우저의 모든 호출은 "BlockViewHandler"(Web.config 파일에서 볼 수 있음)에 차단되므로 .aspx 파일 (webform)을보기 폴더 밖으로 가져와야합니다 보기 폴더의).

작성한 다른 폴더에서는 컨트롤러없이 작동해야합니다. 예를 들어 "/webforms/webform1.aspx"에 넣으면 iframe을 사용하지 않는 경로입니다.

컨트롤러 :

UPDATE 여기은 도움이 될 수 있습니다 희망, 문제의 새로운 정보와 예제입니다

영문 파일을 호출
public class ProductsController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); //Razor file in Views/Products/Index.cshtml 
    } 

    public ActionResult ActionThatRetrieveAndAspx() 
    { 
     return View("WebForm1"); //Aspx file Views/Products/WebForm1.aspx 
    } 
} 

제품에 Index.html의 내용, iframe을 통해 :

@{ 
    ViewBag.Title = "Index title"; 
} 

<h2>Index</h2> 

Calling aspx file from iframe: 

<iframe src="@Url.Action("ActionThatRetrieveAndAspx","Products")" width="1000" height="400"></iframe> 

제품 내용 WebForm1.영문 :

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title>Title</title> 
    </head> 
    <body style="background-color: #999999; padding: 10px;"> 
     This is ActionThatRetrieveAndAspx WebForm1.aspx 
    </body> 
</html> 
+0

"/webforms/webform1.aspx"오픈 웹 양식에서 탐색 링크를 만들어 다시 MVC 웹 사이트를 탐색 할 수 있다는 것입니다 그 webforms는 프로젝트 루트 경로에 직접 있습니까? 그렇다면 작동하지 않습니다. –

+1

이것은 두 번째 대답입니다 ... 내가 말하고자하는 것은 System.Web.UI.Page (WebForm1.aspx)에서 상속받은 aspx 파일이 있으면 해당 종류의 파일을 Views 폴더 외부에 배치해야한다는 것입니다. 당신은 컨트롤러를 통해 요청을 통과하지 않고 "정상적인"URL로 호출 할 수 있습니다 ... aspx의 다른 종류는 "System.Web.Mvc.ViewPage"에서 상속 한 것들입니다. 그 파일은 Razor 파일로 동작해야합니다. in view 폴더에 있고 요청은 컨트롤러를 통해 이루어집니다. – jherrera

+0

설명을 주셔서 감사합니다. 제 질문이 업데이트되었습니다. 한번보세요. –

0

내가 MVC 프로젝트의 루트 폴더에 웹 양식을 넣고 같이 호출 :

<iframe src="~/webform.aspx"...></iframe> 

내가 컨트롤러를 참조하지 않습니다.

이 기술에 대한 좋은 보너스는 쉽게 의미합니까, 대상 = "_ 부모"