部分视图调用,如果未打开则调用索引

时间:2017-04-20 15:16:41

标签: c# jquery ajax asp.net-mvc

我有一个像这个简单图像的网站

enter image description here 红框中的所有内容都是带有默认布局的索引页面,蓝色显示我的局部视图。

我有一个用于电子邮件的mvc控制器,通过ajax actionlink我改变了局部视图。因此,如果要切换文件夹,则无需重新加载整个页面。

如果按照以下方式进行,一切正常: - 单击导航栏中的“电子邮件”,然后从“电子邮件”进入“索引”页面,该页面将自动打开“收件箱”部分视图。

这是我在Html中调用收件箱部分的代码:

<div id="emailBody">
     @Html.Action("EmailPartial", new { module = "1", id = "1,2"  })
</div>

部分控制器具有以下代码:

public PartialViewResult EmailPartial(string module, string id = "1,2", int start = 0, int anzahl = 100)
        {
            if (module == "1")
            {
                List<Emailstatus> emailStati;
                List<int> TagIds = id.Split(',').Select(int.Parse).ToList();
                emailStati = Emailstatus.AllList().Where(x => x.Id.In(TagIds)).ToList();

                List<Emailgesendetview> emails = Emailgesendetview.AllListByBenutzerIdAndEmailStatus(benutzerId, emailStati, start, anzahl);

                if (id == "1,2")
                    ViewBag.position = 1;
                else if (id == "1")
                    ViewBag.position = 2;
                else
                    ViewBag.position = Int32.Parse(id);
                return PartialView("EmailGesendet", emails);
            }
        }

点击右中侧导航栏会触发以下代码:

<li id="menu2">
            @Ajax.RawActionLink(string.Format("<i class='fa fa-circle'></i> Unread"),
            "EmailPartial",
            "Email",
            new { id = "1", module = "1", start = 0, anzahl = 100 },
            new AjaxOptions()
            {
                HttpMethod = "GET",
                AllowCache = false,
                InsertionMode = InsertionMode.Replace,
                UpdateTargetId = "emailBody"
            },
            new { @class = "class"})
        </li>

一切正常。

现在我想在左边的导航栏中添加一些子菜单项,但我不知道(好吧我有一个不好的...)如何在调用Partialview之前调用索引页。

好的,让我解释一下我的问题......

如果用户是电子邮件页面,我可以轻松使用相同的代码,但如果用户位于不同的页面上(可能是支持或其他内容),他现在点击发件箱链接。现在我应该使用发件箱部分视图调用索引电子邮件页面。

所以我看到两个小问题,

在我调用电子邮件索引页面之前,我必须检查我实际上是哪个页面,因为如果我在另一个局部视图的电子邮件索引页面上,我不想重新加载整个页面。此刻我只想用新模型重新加载局部视图。 (这一步很简单)。 我想查看我的页面是设置&#34; pagestatus&#34;在我的视图中。有更好的选择吗?

所以现在如果我在另一个页面然后发送电子邮件,我就不能调用部分视图,因为我必须先调用电子邮件索引页面。

我(我认为这是一个坏主意)是创建不同的电子邮件索引页面(Index1,Index2,Index3)。这些页面可以有不同的局部视图调用,如下所示:

的Index1:

<div id="emailBody">
     @Html.Action("EmailPartial", new { module = "1", id = "1,2"  })
</div>

索引2:

<div id="emailBody">
     @Html.Action("EmailPartial", new { module = "2", id = "1"  })
</div>

INDEX3:

   <div id="emailBody">
         @Html.Action("EmailPartial", new { module = "3", id = "1"  })
    </div>

所以我的解决方案是: 检查我在哪个页面,如果我在不同的控制器上,请拨打我需要的索引。

我认为这不是一个明确的&#34;溶液

有没有人有更好的解决方案?为不同的部分视图调用创建页面听起来不太好......

谢谢

0 个答案:

没有答案