iframe 在 MVC 视图中加载 asp.net web 表单
Posted
技术标签:
【中文标题】iframe 在 MVC 视图中加载 asp.net web 表单【英文标题】:iframe in an MVC view to load asp.net web form 【发布时间】:2013-03-05 06:20:21 【问题描述】:我有一个名为 ProductsController 的控制器,我使用 index 方法加载索引视图,其中包含一个名为 WebForm1.aspx 的 Web 表单,索引视图已设置并正常工作。现在我想在索引视图中添加一个 iframe 来显示 WebForm1.aspx 的内容。两个视图都位于 MVC 项目中的同一文件夹 Views/Products 中。我做了以下事情:
<iframe src="/ProductsController/Index?WebForm1.aspx" >
</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" >
</iframe>
有人可以解释为什么它不起作用吗?以及如何让它发挥作用?谢谢。
【问题讨论】:
【参考方案1】:您可以指向 Webform.aspx 文件的实际位置。
<iframe src="/FolderPath/WebForm1.aspx" >
</iframe>
您的代码假定 MVC 运行时将查看一个名为“ProductsController”的文件夹和一个名为“Index”的子文件夹
如果你的 Webform1.aspx 文件确实在那个目录结构中,请将 src 属性更改为src="/ProductsController/Index/WebForm1.aspx"
【讨论】:
【参考方案2】:你应该把你的 .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")" ></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>
【讨论】:
"/webforms/webform1.aspx",你的意思是webforms直接在项目根路径下吗?如果是这样,它不起作用。 这是第二个答案...我的意思是,如果你有一个继承自 System.Web.UI.Page (WebForm1.aspx) 的 aspx 文件,那么应该放置那种文件在 Views 文件夹之外,这样您就可以通过“普通”url 调用它,而无需通过控制器传递请求……另一种 aspx 是从“System.Web.Mvc.ViewPage”继承的那些文件的行为作为 Razor 文件,应放置在 views 文件夹中,并且请求通过控制器。 感谢您的解释,更新了我的问题,请看一下。【参考方案3】:我把webform放到MVC项目的根目录下,这样调用:
<iframe src="~/webform.aspx"...></iframe>
我没有在控制器中引用它。
这项技术的一个不错的好处是,您可以通过在 target="_parent" 中打开 webform 中的导航链接来轻松导航回您的 MVC 网站
【讨论】:
以上是关于iframe 在 MVC 视图中加载 asp.net web 表单的主要内容,如果未能解决你的问题,请参考以下文章
如何从字节数组 c# MVC .NET Core 在 iframe 中显示 pdf
在 ASP.NET Core 2 中处理异常的推荐方法? [关闭]