何が間違っていたのかわかりませんが、新しいバージョンの 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);
}
誰でもこれで私を助けることができますか?