在MVC视图中加载iframe以加载asp.net Web表单

时间:2013-03-16 15:21:34

标签: asp.net html5 iframe asp.net-mvc-4

我有一个名为ProductsController的控制器,我使用索引方法在一个名为WebForm1.aspx的Web表单中加载索引视图,索引视图已经设置并且工作正常。现在我想在索引视图中添加一个iframe来显示WebForm1.aspx的内容。两个视图都位于MVC项目中的Views / Products文件夹中。我做了以下事情:

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

    </iframe>

我的Views / web.config设置为next:

     

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

有人可以解释为什么它不起作用?以及如何使它工作?谢谢。

3 个答案:

答案 0 :(得分:13)

您应该将.aspx文件(webform)放在views文件夹之外,因为通常来自浏览器的任何调用都会被&#34; BlockViewHandler&#34; (您可以在views文件夹的web.config文件中看到)。

在您创建的任何其他文件夹中,它应该在没有控制器的情况下工作。 例如,如果你把它放在&#34; /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
    }
}

产品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>

产品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>

答案 1 :(得分:2)

您可以指向Webform.aspx文件的实际位置。

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

    </iframe>

您的代码确定MVC运行时将查看名为“ProductsController”的文件夹和名为“Index”的子文件夹

如果您的Webform1.aspx文件确实在该目录结构中,请将src属性更改为src="/ProductsController/Index/WebForm1.aspx"

答案 2 :(得分:0)

我把webform放到MVC项目的根文件夹中,然后调用它:

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

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

这项技术的一个很好的好处是你可以通过在webform中打开导航链接轻松导航回你的MVC网站=&#34; _parent&#34;