Как сгенерировать правильный URL при рендеринге частичного просмотра через ajax в asp.net mvc 3? - PullRequest
0 голосов
/ 04 сентября 2011

Моя проблема в том, что я пытаюсь создать блог, используя как можно больше 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 на моей странице макета, чтобы открыть частичное представление блога:

@Ajax.ActionLink("Blog", "Blog", new AjaxOptions()
               {

                   UpdateTargetId = "main"
               })

Ответы [ 2 ]

1 голос
/ 04 сентября 2011

В этом весь смысл AJAX.URL не меняются.Если вы измените их, браузер перенаправляет.Вы можете реализовать решение, используя фрагменты URL (#).Вы можете манипулировать URL после знака # без перенаправления.Это позволяет обрабатывать историю с AJAX.Есть также плагины для jQuery, такие как , этот , который может включить историю с вызовами AJAX и, как следствие, кнопки Назад / Далее.

Если вы хотите, чтобы ваше приложение также работало без AJAX, выможет проверить в действии вашего контроллера, был ли запрос выполнен с использованием Ajax (Request.IsAjaxRequest()) и вернуть полное представление вместо частичного.Поэтому, если пользователь вводит URL-адрес непосредственно в браузере истории, он увидит полную страницу с макетом, а не только частичную.


ОБНОВЛЕНИЕ:

Я подозреваю, что ваш Ajax.ActionLinkне работает должным образом, потому что вы забыли включить следующий скрипт:

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

Вот что заставит этих помощников Ajax. * выполнять запросы Ajax в приложении ASP.NET MVC 3.

0 голосов
/ 04 сентября 2011

Ты не должен так поступать.

С точки зрения SEO и пользователя это ужасная навигация.

Я бы загружал сообщения в блоге как отдельные страницы, чтобы пауки могли переходить по вашим ссылкам, а пользователи и другие веб-сайты могли ссылаться непосредственно на ваши сообщения.

Используйте AJAX с умом, не пытайтесь делать все, что движет AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...