2011-09-30 60 views
0

我有以下结构:查看+部分景色相互矛盾的ASP.NET MVC3组合

浏览:

首页

文章

局部视图:

简介

常见问题

在页面的顶部,在我的头,是一个导航菜单 - 包含调用到我的HomeController类的不同方法的多个Ajax.ActionLinks来请求一个局部视图和然后将该内容放置在我的中心DIV中。所以我可以点击Faq链接,我的页面中心DIV中的内容现在将包含我的Faq的部分视图。现在,我有一个文章视图,看起来完全不同,因此需要将其分离为自己的视图,而不是局部视图,而且我遇到的问题是,如果我单击我的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> 

此代码将自动加载局部视图用于我的“介绍”(导入)由每次初始加载主视图时都是默认的。所以基本上,由于“Articles”的链接是Html.ActionLink(与Ajax.ActionLink相对),当它被点击时,我被带到Articles视图。例如,当我在Articles视图中点击Site.Master标题中的“Book”Ajax.ActionLink时,代码将尝试使用“Book”部分视图更新“content”DIV。只有在主页视图中才需要此行为,原因很明显。那么,在查看与我的主视图不同的视图时,如何为我的Ajax.ActionLinks提供不同的行为?

谢谢!

克里斯

+0

如果您分享relavent代码,它将帮助其他人识别问题... – Rafay

回答

2

这类架构将会给你很多的问题。对于stanrtes,你不能链接到任何页面。您的所有内容都发生在您的主页面中。

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

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

+0

我很感谢您的意见,但我正在寻找一些帮助解决我的问题,而无需更换体系结构。 – Chris

+0

您的回应实际上导致我将所有内容分解为各自的观点。 – Chris

+0

@Chris--与其说是行动方式,不如说是观点。观点只是数据的观点。操作方法是页面的中心枢纽(即控制器方法)。您可以采用相同的视图,并使用不同的操作方法填充它并获得不同的结果。 –