【问题标题】:iframe in an MVC view to load asp.net web formiframe 在 MVC 视图中加载 asp.net web 表单
【发布时间】:2013-03-05 06:20:21
【问题描述】:

我有一个名为 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>

有人可以解释为什么它不起作用吗?以及如何让它发挥作用?谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    <iframe src="/FolderPath/WebForm1.aspx" width="1000" height="400">
    
        </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")" 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>
      

      【讨论】:

      • "/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 网站

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2021-10-06
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        • 2011-03-31
        • 2017-06-14
        相关资源
        最近更新 更多