2

何が間違っていたのかわかりませんが、新しいバージョンの jQuery に更新したことで、私の ajax ページが機能しなくなりました。

Google CDN の 1.8.3 を使用していましたが、現在は 1.9.1 を使用しようとしています。また、Google CDN からも jQuery UI を 1.9.2 に更新しました。最後に、ページに最新の「jquery.unobtrusive-ajax.min.js」を採用しました。

私のウェブサイトでは、ajax 呼び出しを使用してページの div を置き換えるページを除いて、すべて正常に動作します。このページは完全に機能していましたが、ユーザーが送信をクリックすると、別のページに読み込まれます。

これは、私のページを大幅に簡素化する jsfiddleです。シンプルなhtmlを返す可能性のあるjsfiddleで「偽のコントローラー」を呼び出す方法がわからないので、必要に応じて変更してください。ボタンをクリックすると、div が同じ GUID に置き換えられるはずです。Ajax 呼び出しは、MVC 3 の Ajax オブジェクトを使用して生成されています。次のようにします。

 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);
}

誰でもこれで私を助けることができますか?

4

1 に答える 1

1

Unobtrusive が失敗したため、ページは ajax がないかのように動作します。Microsoft.jQuery.Unobtrusive.Ajaxのバージョンを必ず更新してください。古いバージョンでは前述のように非推奨の .live() メソッドが使用されていますが、新しいバージョンは .on() で更新されています。

インストール:

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

プロジェクトサイト。最新バージョン 2.0.30506.0 は、jQuery 1.9.1 で問題なく動作します。http://docs.nuget.org/のドキュメントからの追加の NuGet ヘルプ。

于 2013-05-25T14:22:17.867 に答える