1

我在我的布局页面(菜单+ iframe)中,我想在菜单中单击后在 iframe 中加载一个 cshtml 文件(查看页面)。目标不是加载整个布局页面

我试过这样:

<ul id="qm0" class="qmmc">
    <li><a class="qmparent" >FILES</a>
        <ul class="rgauche">
                <li>@Html.ActionLink("USERS","getUsers")</li>   
                <li><a id="disconnect">Deconnexion</a></li>                              
             </ul>
    </li>
</ul>

但它会加载整个布局页面

我从另一个 ASP.NET 项目中得到了这个想法,该项目在单击菜单后使用 javascript 在 iframe 中加载 .aspx 页面

 <ul id="qm0" class="qmmc">
        <li><a class="qmparent" >FILES</a>
            <ul class="rgauche">
                    <li><a id="getuser">USERS</a></li>   
                    <li><a id="disconnect">Deconnexion</a></li>                              
                 </ul>
        </li>
    </ul>


            $(function () {

                $('#getuser').click(function () {
                    document.getElementById('myIframe').src = "users.aspx";
                    return false;
                });
            });

有任何想法吗 ?

4

3 回答 3

1

通过操作方法加载视图。在此视图中,将 Layout 值设置为 null,以便它不会使用 viewstart.cshtml 中定义的布局

@{
  Layout=null;
}
<p>some partial view content</p>

编辑: 不太确定你想要实现什么。但是如果你想更新布局内的 iframe 内容,你可以这样做

假设你Layout.cshtml是这样的

<head>
    //Load jQuery library
</head>

<body>
 @Html.ActionLink("List", "GetUsers", "Users", null, new { @class = "iframable" })
 <iframe id="ifrm" style="width:500px; height:200px; border:1px solid black;">
 </iframe>

@RenderBody()

<script type="text/javascript">
    $(function () {
        $(".iframable").click(function (e) {
            e.preventDefault();
            var item = $(this);
            $("#ifrm").attr('src', item.attr("href"));
        });
    });
</script>

现在GetUsers在你的用户控制器中有 action 方法

public ActionResult GetUsers()
{
      return View();
}

并确保在GetUsers.cshtml视图中,布局设置为 null

@{
  Layout=null;
}
<p>some partial view content</p>
于 2012-07-10T15:04:12.020 回答
1

您必须将 iframe 的“src”属性指向返回视图的控制器操作。

例如。

返回不带布局的局部视图的操作

public PartialViewResult IframeAction()
{
   return PartialView();
}

Javascript

$('#getuser').click(function () 
{                     
    document.getElementById('myIframe').src 
          = "/IframeController/IframeAction";                     
    return false;                 
}); 
于 2012-07-10T15:31:39.927 回答
0

您在 iframe 中加载的页面需要不同的布局。
然后,在这个页面中,你可以做

@{
   Layout = "YourLayout.cshtml";
}

默认情况下,您的所有 cshtml 视图都使用 _ViewStart.cshtml 中提供的布局

编辑
您可以使用以下概念:

<iframe name="my_frame"></iframe>
@Html.ActionLink("Users", "GetUsers", null, new { target = "my_frame" })

您为 iframe 命名,然后将该名称用作操作链接的目标。那是最简单的解决方案。如果您愿意,还可以使用 jquery click 处理程序,如其他答案之一中提供的那样。

于 2012-07-10T15:00:20.067 回答