2013-03-16 105 views
5

私はProductsControllerというコントローラを持っています。インデックスメソッドを使用して、WebForm1.aspxという名前のWebフォームを持つインデックスビューをロードします。適切に動作しています。今度は、WebForm1.aspxのコンテンツを表示するために、インデックスビューにiframeを追加します。両方のビューは、MVCプロジェクトの同じフォルダビュー/製品にあります。私は次のようでした:MVCビューのiframeでasp.net Webフォームをロードするiframe

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

    </iframe> 

私の見解/ web.configファイルは次のように設定されます。

とWebフォームの継承がのように次のです:

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

iframeにエラーメッセージ "HTTP 404 - 探しているリソース(またはその依存関係の1つ)が削除されている可能性がありますその名前が変更されたか、一時的に利用できなくなっています。

私は私のGlobal.asaxファイルに次の行を追加することも試してみました:私はiFrameのはを表示しますが、空取得するユニークな方法は、完全なを使用することです

RouteTable.Routes.RouteExistingFiles = true; 

をも失敗し、

次のような物理パス:

<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との内容、ASPXファイルを呼び出します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のコンテンツ。ASPX:

<%@ 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」で開いているWEBフォームでナビゲーションリンクを作成することにより、バックあなたのMVCのウェブサイトにナビゲートすることができるということですそのwebformsはプロジェクトのルートパスに直接入りますか?そうであれば動作しません。 –

+1

これは2番目の答えです...私は、System.Web.UI.Page(WebForm1.aspx)から継承するaspxファイルがある場合、その種類のファイルはViewsフォルダの外に配置する必要がありますあなたはコントローラを介してリクエストを渡すことなく "通常の" URLで呼び出すことができます...他の種類のaspxは "System.Web.Mvc.ViewPage"から継承したファイルで、これらのファイルはRazorファイルとして動作し、配置されますビューフォルダ内にあり、要求はコントローラを介して行われます。 – jherrera

+0

説明をありがとう、私の質問を更新しました、見てみましょう。 –

0

私は、MVCプロジェクトのルートフォルダにWebフォームを入れて、このようにそれを呼び出す:私は、コントローラでそれを参照しない

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

この技術の素敵なボーナスは、あなたが簡単にあなたが意味するか、ターゲット=「_親」

関連する問題