ビュー内には、次のものがあります。
@using (Html.BeginForm())
{
<input type="submit" id="savebtn" value="Save" onclick="saveLayout()"/>
}
<script type="text/javascript">
function saveLayout() {
$.ajax({
url: '/Page/SaveFaces/',
data: {
/* layout data of the page, irrelevant */
},
type: 'post',
success: function () {
}
});
return false;
}
</script>
上記は次のアクションにヒットし、ユーザーを元の URL にリダイレクトするだけです (データを保存することも想定されていますが、問題に影響しないため、簡単にするためにその部分を削除しました)。
[HttpPost]
public ActionResult SaveFaces(string items)
{
return Redirect(Request.UrlReferrer.AbsoluteUri);
}
次に、リダイレクトにより、この非常に標準的なモデル取得アクションに戻ります。
public ActionResult Index(int id = 0)
{
var page = db.Pages.Find(id);
if (page == null) return HttpNotFound();
return View(page);
}
問題は、この最後のアクションが 2 回呼び出されることです。
AJAX 呼び出しを削除して、通常の POST 操作を実行してみましたが、問題は解決しました。ただし、送信しようとしているデータは jQuery スクリプトを介してのみ取得でき、フォームに入れることはできません。私は AJAX メソッドを使用するように制約されています。
アクションが2回ヒットしないようにするためにできることはありますか?