Asp.net mvc 3 在asp.net mvc 3中通过ajax呈现局部视图时,如何生成正确的url?

Asp.net mvc 3 在asp.net mvc 3中通过ajax呈现局部视图时,如何生成正确的url?,asp.net-mvc-3,Asp.net Mvc 3,我的问题是,我尝试使用尽可能多的ajax创建博客,而不是呈现完整视图,每次用户单击导航链接时,部分视图都会通过ajax调用生成,但我的url不会更改,当我手动键入home/blog时,只有部分视图生成html,而没有主布局 这是我的控制器: public ActionResult Blog() { var rep = repository.FindAllPosts().ToList(); return Partial

我的问题是,我尝试使用尽可能多的ajax创建博客,而不是呈现完整视图,每次用户单击导航链接时,部分视图都会通过ajax调用生成,但我的url不会更改,当我手动键入home/blog时,只有部分视图生成html,而没有主布局

这是我的控制器:

public ActionResult Blog()
        {
            var rep = repository.FindAllPosts().ToList();    
                return PartialView(rep);
        }
这是我的博客视图:

@model IEnumerable<SpongleMVC.Models.Post>

@if (User.Identity.Name == "alanik")
{
    <div id="adminPostPanel">
        @Ajax.ActionLink("Create Post", "CreatePost", new AjaxOptions()
{

    UpdateTargetId = "main"
})
    </div>
}

@Html.Partial("_PartialPostList", (System.Collections.IEnumerable)Model)

这就是AJAX的全部要点。URL不会改变。如果更改它们,浏览器将重定向。您可以使用url片段(
#
)实现一个解决方案。您可以在
#
签名后操作url,而无需重定向。这允许使用AJAX处理历史记录。还有一些jQuery插件,例如可以通过AJAX调用启用历史记录,并因此启用后退/下一步按钮

如果您希望应用程序在没有AJAX的情况下也能工作,您可以在控制器操作中测试请求是否使用AJAX(
request.IsAjaxRequest()
)完成,并返回完整视图而不是部分视图。因此,如果用户在hist浏览器中直接键入url,他将看到一个带有布局的完整页面,而不仅仅是部分页面


更新:

我怀疑您的Ajax.ActionLink没有按预期工作,因为您忘记包含以下脚本:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>


这就是让这些Ajax成为现实的原因。*助手在ASP.NET MVC 3应用程序中执行Ajax请求。

您不应该这样做

从SEO的角度以及用户的角度来看,这是一个可怕的导航

我会将博客文章作为单独的页面加载,这样蜘蛛就可以跟踪你的链接,用户和其他网站也可以直接链接到你的文章


明智地使用AJAX,不要试图让一切都由AJAX驱动。

让我直截了当地说,没有办法在我的主布局中生成局部视图(我不希望主布局刷新自己,只希望通过AJAX弹出不同的局部视图),在我这样做的同时,我仍然希望我的url发生变化,点击博客链接后从家到家/博客?不可能吗?我需要重新考虑我的解决方案?有什么方法可以做到这一点,但我不想刷新整个页面,而只是其中的一部分,同时更改地址?@alan,当然有可能。这就是Ajax.ActionLink所做的。查看我关于
jquery.unobtrusive ajax.js
脚本的更新,如果您说ajax.ActionLink执行完整的回发而不是ajax请求,您可能会忘记包含该脚本。是的,但这只是我的“设计师网站博客”,它使用了一页应用程序的概念,我真的很喜欢这个想法,但我想这并不像听起来那么简单,但谢谢你提供的信息,我希望我的网站看起来更像一个flash网站,不刷新你知道为什么url必须更改?如果你使用flash,它不会改变。如果你想让人们知道一篇文章的url,包括一个“永久链接”,他们可以点击它直接加载文章并将其添加到书签中。嗯,其实这并不重要,只是更好的视觉效果,我只是想知道这是否可能,但我想不可能,但还有一点,我有一些其他操作重定向到博客操作,因此,当我们重定向部分视图时,它会显示为完整视图,我不希望这样,我希望看到包含ajax部分视图的整个布局,所以我仍然在想该怎么做
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>