私のコメントによると、これを引き起こしている可能性のあることがいくつかあります。
- 目立たないファイルを複数回ロードしました
- フォームにはアクション メソッドが定義されており、ボタンは送信ボタンとしてフォーム タグ内にあります。これによりフォームが送信され、クリックでもフォームが送信されます - 例を参照してください
例
<form action="/somerowout/someaction">
<input type="text" id="text1"/>
<input type="text" id="text1"/>
<input type="submit" />
</form>
投稿する前にフォームの値を検証する必要がある場合は、追加の Ajax 呼び出しを接続しないでください。JavaScript は次のようになります。
$(document).ready(function () {
$("form").submit(function(){
var result = $("#enrolledStudents").sortable('toArray');
if(result == null){
//do something to show validation failed
return false;
}
return true;
});
});
フォーム コードは次のようになります。
@using (@Ajax.BeginForm(new AjaxOptions { })) {
<input type="text" id="text1"/>
<input type="text" id="text1"/>
<input type="submit" />
}
Html ヘルパーではなく Ajax を使用する場合は、フォームの代わりに div を使用すると、投稿が重複することはありません。これを達成する方法は次のとおりです。
<div id="enrolledStudents">
<--! your elements -->
<button id="saveStudents">Save</button>
</div>
JavaScript
$(document).ready(function () {
$("saveStudents").click(function(){
var result = $("#enrolledStudents").sortable('toArray');
if(result !== null){ /* do some kind of check here. */
$.ajax({
url: '@Url.Action("Enrollment", "Classroom")',
data: { students: result },
type: 'POST',
traditional: true,
success : function(data) {
if (data.status) {
window.location = data.route;
}
}
})
} else {
/* notify ui that save didn't happpen */
}
});
});
コントローラー アクションの例
Ajax を使用してデータを投稿する場合、ルートを渡す方法の例を次に示します。
[HttpPost]
public ActionResult SomethingPost(SomeModel model) {
if (Request.IsAjaxRequest()) {
var json = new {
status = true,
route = @Url.RouteUrl("MyRouteName", new { /* route values */ })
};
return Json(json, JsonRequestBehavior.AllowGet);
}
}