2013-05-25 3 views
2

Я не знаю, что я сделал не так, но, обновив новую версию jQuery, моя страница ajax больше не работает.Новая версия jQuery загружает другую страницу вместо замены div

Я использовал 1.8.3 из google CDN, и теперь я пытаюсь использовать 1.9.1. Я также обновил пользовательский интерфейс jQuery до 1.9.2 также из CDN Google. Наконец, я взял последнюю «jquery.unobtrusive-ajax.min.js» для своей страницы.

Все работает отлично на моем сайте, кроме страницы, где я использую вызов ajax для замены div на моей странице. Эта страница работала отлично, но теперь, когда пользователь нажимает кнопку «Отправить», она просто загружается на другую страницу.

Here is a jsfiddle, которые упрощают мою страницу. Я не знаю, как назвать «поддельный контроллер» в jsfiddle, который может вернуть простой html, поэтому измените его, если хотите. Нажимая кнопку, предполагается заменить div на тот же идентификатор GUID. Вызов Ajax сгенерирован с объектом Ajax с MVC 3. Как это:

using (Ajax.BeginForm("AddSubtitle", "Recipe", 
        new AjaxOptions 
        { 
         UpdateTargetId = superGuid, 
         HttpMethod = "POST", 
         InsertionMode = InsertionMode.Replace, 
         OnSuccess = "done" 
        })) 
       { 
        <input type="hidden" name="IDRecipe" value="@Model.IDRecipe" /> 
        <a name="SubtitleSection" ></a> 
        <input class="field required span6 text-box single-line" name="Name" /> 
        <input type="submit" class="btn btn-success" value="Ajouter une catégorie d'ingrédient" /> 
       } 

Мой контроллер, кажется, работает очень хорошо, так как в новой странице, которая открывается содержание является совершенным. Здесь это так, что у вас есть все части головоломки.

[HttpPost] 
[Authorize] 
public PartialViewResult AddSubtitle(Subtitle sub) 
{ 
    Recipe realRecipe = db.Recipes.Find(sub.IDRecipe); 

    if ((Guid)Membership.GetUser().ProviderUserKey == realRecipe.IDUser || User.IsInRole("Admin")) 
    { 
     sub.Order = realRecipe.Subtitles.Count + 1; 
     if (sub.Name != null && sub.Name != "") 
     { 
      realRecipe.Subtitles.Add(sub); 
      db.SaveChanges(); 
     } 
     else 
      ModelState.AddModelError("", "Le nom de la catégorie ne peut pas être vide!"); 

     return PartialView("_SubtitleList", Utils.GetListIngredientAndSubtitle(realRecipe.IDRecipe, realRecipe.Subtitles)); 
    } 
    else 
     return PartialView("_SubtitleList", null); 
} 

Кто-нибудь может мне помочь?

+0

Что-нибудь в консоли браузера после загрузки страницы? –

+1

Ошибка при использовании связанного jsFiddle: «Uncaught TypeError: Object [object Object] не имеет метода« live »« Live устарел, используйте делегирование с .on(). Чтобы перенести плагин unobtrusive-ajax, вы можете использовать: http://blog.jquery.com/2013/05/01/jquery-migrate-1-2-0-released/ –

+0

Я тестировал хром, и это не помогло покажите мне эту ошибку. Просто попробуйте с IE и выполните ту же ошибку, что и @roasted. Я попробую его ссылку и посмотрю, поможет ли она! –

ответ

1

Справа ваша страница ведет себя так, как будто нет ajax, потому что ненавязчивый сбой. Убедитесь, что вы обновить версию Microsoft.jQuery.Unobtrusive.Ajax - более старые версии используют метод устаревшим .live(), как уже упоминалось, но новый обновляется с .on()

Установка:

PM> Install-Package Microsoft.jQuery.Unobtrusive.Ajax 

Project site. Последняя версия 2.0.30506.0 работает отлично с jQuery 1.9.1 для меня. Дополнительная помощь NuGet из их документов на http://docs.nuget.org/.

+0

AFAIK, у меня есть последняя версия. Посмотрите мой jsfiddle во внешнем файле. Я получаю это с этого места: http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.min.js –

+0

Да, это так, как я вижу. Я предположил, что вы используете NuGet, поскольку он поставляется с MVC4 (может быть, старый Javascript ненавязчив для MVC 3). Я расскажу об этом выше. Я не вижу версий CDN для этого, поэтому вам, возможно, придется использовать свои собственные. –

+0

Я дам ему попробовать сегодня! Спасибо –

Смежные вопросы