2

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

//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

如何处理?

4

3 回答 3

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 
        });
    }
});
于 2013-01-03T14:20:33.907 回答
1

您可以将自定义属性添加到您的表或行,其中包含您需要调用的控制器的 url。在您的方法中,您可以阅读此自定义属性以获取控制器的 url。在此处查找JQuery attr 方法

于 2013-01-03T14:18:33.847 回答
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;
});

于 2013-01-03T14:24:32.930 回答