7

ProductsController というコントローラーがあり、index メソッドを使用して、WebForm1.aspx という Web フォームを含むインデックス ビューを読み込みます。インデックス ビューはセットアップされ、正常に動作しています。次に、インデックス ビューに iframe を追加して、WebForm1.aspx のコンテンツを表示します。両方のビューは、MVC プロジェクトの同じフォルダー Views/Products にあります。私は次のことをしました:

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

    </iframe>

私のViews/web.configは次のように設定されています:

WebForm の継承は次のとおりです。

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

それでも、iframe には次のエラー メッセージが表示されます。

また、global.asax ファイルに次の行を追加しようとしました。

RouteTable.Routes.RouteExistingFiles = true;

失敗もしましたが、

iFrame を表示するが空にする独自の方法は、次のように完全な物理パスを使用することです。

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

    </iframe>

誰かがなぜそれがうまくいかないのか説明できますか? そして、それを機能させる方法は?ありがとうございました。

4

3 に答える 3

14

.aspx ファイル (Web フォーム) はビュー フォルダーの外に置く必要があります。通常、ブラウザーからの呼び出しは "BlockViewHandler" (ビュー フォルダーの web.config ファイルで確認できます) によってブロックされるためです。

作成する他のフォルダーでは、コントローラーなしで機能するはずです。たとえば、「/webforms/webform1.aspx」に配置すると、そのパスが iframe で使用するパスになります。

更新これは、質問の新しい情報を含む例です。役立つことを願っています:

コントローラー:

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
    }
}

iframe を介して aspx ファイルを呼び出す Products Index.html のコンテンツ:

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

<h2>Index</h2>

Calling aspx file from iframe:

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

Products 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>
于 2013-03-16T15:42:26.637 に答える
2

Webform.aspx ファイルの実際の場所を指定できます。

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

    </iframe>

あなたのコードは、MVC ランタイムが「ProductsController」というフォルダーと「Index」というサブフォルダーを見ていると想定しています。

Webform1.aspx ファイルが実際にそのディレクトリ構造にある場合は、src 属性を次のように変更します。src="/ProductsController/Index/WebForm1.aspx"

于 2013-03-16T15:25:41.290 に答える
0

Web フォームを MVC プロジェクトのルート フォルダーに配置し、次のように呼び出します。

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

コントローラーでは参照しません。

この手法の優れたボーナスは、Web フォームのナビゲーション リンクを target="_parent" で開くことにより、MVC Web サイトに簡単に戻ることができることです。

于 2016-05-15T18:04:37.787 に答える