【问题标题】:Loading a non-MVC intranet webpage in MVC View在 MVC 视图中加载非 MVC 内网网页
【发布时间】:2016-07-21 07:33:23
【问题描述】:

我们有一个旧的自定义 asp Intranet 站点,我们可以在其中访问我们的内部数据库,并且我设法设置了一个 html 页面,以便能够使用 标签加载其他 Intranet 站点,例如 ccnet、wiki 等,通过页面顶部的静态菜单。
示例遗留代码:
菜单.asp:

<body topmargin="0" and leftmargin="0">
<div id="header">
     <a href="default.asp" id="logo">
     <img src="Images/Home.png" alt="Bam! Home" width="40" height="40"/>
     </a>
     <ul id="NavMenu">
          <li><a>DB tasks</a>
                <ul>
                     <li><a href="ccnet.asp?Target=RestoreBak">Restore .bak</a></li>
                     <li><a href="ccnet.asp?Target=RestoreSqb">Restore .sqb</a></li>
                     <li><a href="ccnet.asp?Target=CreateDbSnapshot">Create Snapshot</a></li>
                     <li><a href="ccnet.asp?Target=RevertToDbSnapshot">Revert to Snapshot</a></li>
                     <li><a href="ccnet.asp?Target=DeleteDbSnapshot">Delete Snapshot</a></li>
                </ul>
          </li>
          <li><a>General</a>
                <ul>
                     <li><a href="ccnet.asp?Target=Wiki">Wiki</a></li>
                </ul>
          </li>
     </ul>
</div>

ccnet.asp(在iframe中加载内网页面以保留菜单):

<!-- #include file = "common.asp" -->

<html>

<head>
     <title><%

'Common DB tasks:
     if Request("Target") = "CreateDbSnapshot" then
          Response.write "Create Db Snapshot"

     elseif Request("Target") = "RevertToDbSnapshot" then
          Response.write "Revert To Db Snapshot"

     elseif Request("Target") = "DeleteDbSnapshot" then
          Response.write "Delete Db Snapshot"

     elseif Request("Target") = "RestoreBak" then
          Response.write "Restore Bak"

     elseif Request("Target") = "RestoreSqb" then
          Response.write "Restore Sqb"

'General
     elseif Request("Target") = "Wiki" then
          Response.write "Wiki"

'Final just incase there is an unavailable option:
     else
          response.write "DBServer CCNet"
     end if
     %></title>
     <link rel="stylesheet" type="text/css" href="common.css"/>
</head>

<!--#include file ="menu.asp"-->
<body>
     <%

     dim iFrameTargetSrc
'Common DB tasks:
     if Request("Target") = "CreateDbSnapshot" then
          iFrameTargetSrc = "http://DBServer/ccnet/server/local/project/1.%20Create%20DB%20Snapshot/ViewProjectReport.aspx"

     elseif Request("Target") = "RevertToDbSnapshot" then
          iFrameTargetSrc = "http://DBServer/ccnet/server/local/project/3.%20Delete%20DB%20Snapshot/ViewProjectReport.aspx"

     elseif Request("Target") = "DeleteDbSnapshot" then
          iFrameTargetSrc = "http://DBServer/ccnet/server/local/project/FS%20Backup%20SQB/ViewProjectReport.aspx"

     elseif Request("Target") = "RestoreBak" then
          iFrameTargetSrc = "http://DBServer/ccnet/server/local/project/Restore%20DB/ViewProjectReport.aspx"

     elseif Request("Target") = "RestoreSqb" then
          iFrameTargetSrc = "http://DBServer/ccnet/server/local/project/Restore%20SQB/ViewProjectReport.aspx"

'General
     elseif Request("Target") = "Wiki" then
          iFrameTargetSrc = "http://wiki/sites/CompanyWiki/SitePages/newhome.aspx"

'Final just incase there is an unavailable option:
     else
          iFrameTargetSrc = "http://DBServer/ccnet/ViewFarmReport.aspx"
          response.write "Cannot find requested target " & Request("Target") & "."
     end if

     %>
     <iframe src="<%response.write iFrameTargetSrc%>" seamless="true" frameborder="0" width="100%" height="94%"></iframe>

</body>

</html>

我们已经开始将这个遗留的 Intranet 站点转换为 MVC5,但我想不通的是如何能够创建一个可以在一个跨越整个视图的视图中加载 ccnet 和其他 Intranet 站点页面的视图从菜单中选择链接时的页面。视图需要来自控制器的数据。我应该如何将信息传递给控制器​​并加载包含非 mvc 内网站点的视图?

我正在尝试将菜单选项添加到 _Layout.cshtml 页面,但没有找到任何可以为我指明如何实现此功能的正确方向。

任何建议,包含一个链接,可以告诉我如何使用此处发布的示例或解决方案,我们将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    您可以像这样向控制器添加操作方法

    public ActionResult LoadExternalSystem(string identifier)
    {
      switch (identifier.ToLower())
      {
        case "wiki":
        {
          ViewBag.LoadUrl = "http://wiki.somewhere";
          break;
        }
        case "othersystem":
          {
            ViewBag.LoadUrl = "http://othersystem";
            break;
          }
      }
      return View();
    
    }
    

    然后为该操作创建一个如下所示的视图

    @{
        ViewBag.Title = "LoadExternalSystem";
     }
    
     <iframe src="@ViewBag.LoadUrl"></iframe>
    

    然后将以下内容用于您的菜单

    <ul>
      <li><a href="@Url.Action("LoadExternalSystem",new {identifier="wiki"})">wiki</a></li>
      <li><a href="@Url.Action("LoadExternalSystem",new   {identifier="othersystem"})">Other system</a></li>
    </ul>
    

    【讨论】:

    • 该页面似乎包含 iframe,但不包含 src 链接。
    • 好的,我通过将菜单更改为以下内容使其工作:
    • @Html.ActionLink("Wiki", "LoadExternalSystem", "Home", new { identifier = "Wiki" }, null)
    • 我只需要修改 iframe 的大小,有点太小了。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签