ASP.NET MVC3视图组合+部分视图冲突

时间:2011-09-30 20:20:30

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-ajax

我有以下结构:

查看:

主页

文章

部分观点:

简介

常见问题

在页面的顶部,在我的标题中,是一个导航菜单 - 包含多个Ajax.ActionLinks,它们调用我的HomeController类中的不同方法来获取特定的局部视图,然后将该内容放在我的中心DIV中。所以我可以点击Faq链接,我页面中心DIV中的内容现在将包含我的常见问题解答的局部视图。现在,我有一个看起来完全不同的文章视图,因此需要分开它自己的视图而不是局部视图,而我遇到的问题是如果我点击我的Html.ActionLink为“文章” “,我导航到我的文章视图,这是我想要的,但是如果我点击Ajax.ActionLinks的其他链接之一,我需要(不知何故)视图更改回我的主视图,以便我然后可以检索请求的局部视图并将其放入我的中心DIV。知道我怎么能这样做吗?现在AJAX.ActionLink在我的文章视图中被调用时,正在调用我的HomeController,但后来尝试替换我的中心DIV中的内容(我的文章视图中不存在),此外,它不是加载HomeView。

有关如何最好地实现这一目标的任何想法?另外,我没有使用Razor引擎。

因此,导航菜单(一组链接)驻留在我的Site.Master文件中。这是我的链接之一:

  <%= Ajax.ActionLink("Book", "LoadBook", new AjaxOptions() { HttpMethod = "Post", UpdateTargetId = "content", InsertionMode = InsertionMode.Replace })%>

单击此链接时,将调用HomeController中的LoadBook方法。请参阅以下代码:

public ActionResult LoadBook()
{
    return PartialView("Book");
}

在我的Home.aspx视图中,我有以下代码:

<div id="content">
   <% Html.RenderPartial("Intro"); %>
</div>

默认情况下,每当最初加载Home视图时,此代码将自动加载我的“intro”(简介)的局部视图。所以基本上,因为“Articles”的链接是Html.ActionLink(而不是Ajax.ActionLink),当它被点击时,我将被带到Articles视图。例如,当我在Site视图中点击我的Site.Master标题中的“Book”Ajax.ActionLink时,代码将尝试使用“Book”局部视图更新“content”DIV。出于显而易见的原因,仅在Home视图上才需要此行为。那么,在查看与我的主视图不同的视图时,如何为Ajax.ActionLinks提供不同的行为?

谢谢!

克里斯

1 个答案:

答案 0 :(得分:2)

这种架构会给你带来很多问题。对于stanrtes,您无法链接到任何页面。您的所有内容都发生在您的主页面中。

这适用于像GMail这样的应用,但是大多数人会对为什么他们无法保存页面的快捷方式或向朋友发送链接感到困惑。

HTML旨在为每个页面提供唯一的URL。你在上游试图做一些与众不同的事情。假设您要使用片段跳转到页面的其他部分。你不能这样做。