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 显示一条错误消息:“HTTP 404 - 您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。”

我还尝试将下一行添加到我的 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 文件(webform)放到views 文件夹之外,因为通常来自浏览器的任何调用都会被“BlockViewHandler”(你可以在views 文件夹的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
    }
}

Products Index.html 的内容,通过 iframe 调用 aspx 文件:

@{
    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

You can point to the actual location of the Webform.aspx file.

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

    </iframe>

Your code asssumes that the MVC runtime would be looking at a folder called "ProductsController" and a sub folder called "Index"

If you Webform1.aspx file is really in that directory structure, change the src attribute to src="/ProductsController/Index/WebForm1.aspx"

于 2013-03-16T15:25:41.290 回答
0

我将 webform 放入 MVC 项目的根文件夹中,并像这样调用它:

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

我没有在控制器中引用它。

这种技术的一个很好的好处是,您可以通过在 target="_parent" 中打开 web 表单中的导航链接来轻松导航回您的 MVC 网站

于 2016-05-15T18:04:37.787 回答