可重用的jQuery删除功能

时间:2013-01-03 14:11:02

标签: asp.net asp.net-mvc jquery

我使用以下函数删除表中的行

//delete individual row
jQuery('.stdtable img.delete').click(function(){
    var c = confirm('Continue delete?');
    if(c) jQuery(this).parents('tr').fadeOut(function(){ 
        jQuery(this).remove();
    });
    return false;
});

此代码位于单独的js文件中,并且对所有页面都是通用的。 现在我想添加一个Ajax操作,删除数据库中的行。但是根据我所在的页面,它必须调用不同的控制器。

实施例: 产品页面必须在ProductController中调用delete ProductGroup页面必须在ProductGroupController中调用delete

如何处理?

3 个答案:

答案 0 :(得分:5)

如果您需要某种方法来定义要调用的控制器,可以在表上放置data属性。像这样:

<table class="stdtable" data-remove-url="@Url.Action("DeleteRow", "MyController")">
    <tr data-id="1">
        AAA
        <img class="delete" src="foo.jpg" />
    </tr>
    <tr data-id="2">
        BBB
        <img class="delete" src="foo.jpg" />
    </tr>
 </table>

然后在您的jQuery中,您可以将此值作为请求的url参数以及要删除的id

jQuery('.stdtable img.delete').click(function(e) {
    e.preventDefault();
    if (confirm('Continue delete?')) {
        var $el = $(this);
        var $tr = $el.closest('tr');
        var url = $el.closest('table').data('remove-url');
        var id = $tr.data('id');

        $tr.fadeOut(function() { 
            $el.remove();
            $.post(url, { rowId = id }); // do the delete on the server 
        });
    }
});

答案 1 :(得分:1)

您可以向表或行添加自定义属性,其中包含您需要调用的控制器的URL。在您的方法中,您可以阅读此自定义属性以获取控制器的网址。在此处查看JQuery attr methode

答案 2 :(得分:0)

如果我理解你的问题,你想点击带删除类的图像来调用删除数据库中的那一行。最简单的解决方案是

<img data-rowid="1" src="something.jpg"/>

jQuery('.stdtable img.delete').click(function(e){
    e.preventDefault();
    var c = confirm('Continue delete?');
    var that = this;
    if(c) {
        var id = this.data("rowid");
        jQuery.ajax({ url : "/resource/"+id, method : "DELETE" 
              statusCode: {
                 200: function() {
                       jQuery(that).parents('tr').fadeOut(function(){ 
                            jQuery(that).remove();
                       });
                 }
              }});

    }
    return false;
});