同じリストページから非同期操作を実行するためのユーザーjQueryajax。
このようなHTMLマークアップがあると仮定します。
<div class="divItem">
<p>Item Desc 108</p>
<a href="../Product/delete/108" class="ajaxAction">Delete</a>
</div>
<div class="divItem">
<p>Item Desc 10p</p>
<a href="../Product/delete/109" class="ajaxAction">Delete </a>
</div>
次に、jQueryコードをいくつか用意します。(このコードが機能するように、このビュー/レイアウトページにjQueryライブラリが含まれていることを確認してください)
<script type="text/javascript">
$(function(){
$("a.ajaxAction").click(function(e){
e.preventDefault(); //prevent default click behaviour
var item=$(this);
$.post(item.attr("href"),function(data){
if(data.Status=="Deleted")
{
//successsfully delete from db. Lets remove the Item from UI
item.closest(".divItem").fadeOut().remove();
}
else
{
alert("Could not delete");
}
});
});
});
</script>
ここで、対応するコントローラー(この例ではProduct)にこのjQueryを処理し、操作後にクライアントにPOST
戻るアクションメソッドがあることを確認します。JSON
[HttpPost]
public ActionResult Delete(int id)
{
try
{
//delete the Item from the DB using the id
// and return Deleted as the status value in JSON
return Json(new { Status : "Deleted"});
}
catch(Exception eX)
{
//log exception
return Json(new { Status : "Error"});
}
}
Deleteアクションメソッドは、JSON
次の形式で有効なものを返します(ステータスの値はDeleted / Errorのいずれかになります)
{
"Status": "Deleted"
}
jQuery postのコールバックでは、JSONデータをチェックしており、ステータス値がDeletedの場合は、UIDOMからアイテムを削除しています。