2014-09-23 123 views
0

所以,我有两个输入,在这里我输入名称和用户的电子邮件,我要去点击一个按钮不能重新绘制表格的jQuery

<input type="text" name="DeleteName" style="visibility:hidden"> 
<input type="text" name="DeleteEmail" style="visibility:hidden"> 
<button class="btn btn-mini btn-primary" type="button" name="delete_btn" style="visibility:hidden" onclick="DbDelete()">Delete</button> 

后,从数据库中删除,这是我表:

<table class="table table-bordered table-hover table-striped table-condensed" id="UserTable"> 
<tr> 
    <th>UserId</th> 
    <th>Name</th> 
    <th>Email</th> 
</tr> 
@foreach (var item in Model) { 
    <tr> 
     <td>@item.UserId</td> 
     <td>@item.Name</td> 
     <td>@item.Email</td> 
    </tr> 
} 

我可以输入两个unputs(包括姓名和电子邮件)或单一个。 这是我控制器从数据库中删除用户动作:

[HttpPost] 
    public ActionResult Delete(User userinfo) 
    { 
     const string noResult = "Search Result Not Found"; 
     using (var uc = new UserContext()) 
     { 
      if (userinfo.Name != null) 
      { 
       var itemforDelete = uc.UserList.SingleOrDefault(o => o.Name == userinfo.Name); 
       CommitChanges(itemforDelete, uc, noResult); 
       return new JsonResult { Data = itemforDelete }; 
      } 
      else 
      { 
       if (userinfo.Email != null) 
       { 
        var itemforDelete = uc.UserList.SingleOrDefault(o => o.Email == userinfo.Email); 
        CommitChanges(itemforDelete, uc, noResult); 
        return new JsonResult { Data = itemforDelete }; 
       } 
      } 
     } 
     return new JsonResult(); 
    } 

这是加载表视图控制器的方法。这个按钮

<a class="btn btn-large btn-primary" type="button" href="home/list">Show all users</a> 

被点击时,它被称为:

public ActionResult List() { 
     List<User> users; 
     using (var uc = new UserContext()) { 
      users = uc.UserList.ToList(); 
     } 
     return View(users); 
    } 

这是我的脚本:

<script type="text/javascript"> 
function DbDelete() { 
    // Get some values from elements on the page: 
    var deletedName = $("input[name='DeleteName']").val(), 
     deletedEmail = $("input[name='DeleteEmail']").val(); 

    var user = { Name: deletedName, Email: deletedEmail }; 

    $.ajax(
    { 
     type: "POST", 
     url: "Delete", 
     data: JSON.stringify({ userinfo: user }), 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     success: OnDeleteSuccess, 
     error: OnDeleteError 
    }); 
} 

function OnDeleteSuccess(data) 
{ 
    alert("success"); 
    //$('#UserTable').remove(data); 
    $("#UserTable").fnDraw(); 
} 
function OnDeleteError(data) { alert("error"); } 

</script> 

用户从数据库中删除,在成功处理程序阿勒特作品,但我的数据库在页面上没有更新,只有在按F5后。

我在做什么错?

+0

任何建议,@ usad? :( – TomatoLion 2014-09-23 13:06:21

+0

仍然不知道,你可以添加代码在哪里启动数据表? – ekad 2014-09-23 13:16:14

+0

我已经添加了一个更多的方法('List')加载数据库到视图 – TomatoLion 2014-09-23 13:19:34

回答

1

目前代码中没有任何内容会导致页面发生任何可见的更改。您需要在OnDeleteSuccess中执行一些操作才能删除相关行。看起来你已经注意到这样做失败了。呈现的表格是否包含可以与返回的数据交叉引用的ID?举例来说,如果您的表行是这样的:

<tr data-id="123"><td>Fred</td><td>[email protected]</td></tr> 

,你可以这样做:

$("'#UserTable').find('tr[data-id="' + data.UserId + '"]').remove(); 

更新:

如果你的表在第一列中的ID喜欢你的链接截图,您可以对其文本()的值进行过滤,如下所示:

$('#UserTable tr').filter(function() { 
    return $(this).find('td:first').text() == data.UserId; 
}).hide(); 

或者这种方法可能可以更容易跟踪:

$('#UserTable tr').each(function() { 
    if($(this).find('td:first').text() == data.UserId) { 
     $(this).hide();  
    } 
}); 

进一步更新:

现在我们已经看到你的.cshtml,如果你想使用jQuery的第一个,即

$("'#UserTable').find('tr[data-id="' + data.UserId + '"]').remove(); 

只呈现在数据ID您的表格通过更改<tr>

<tr data-id="@item.UserId"> 
+0

Yoy意思是做这个? VAR行='​​data.UserId​​data.Name​​data.Email'?然后像这样删除它'$(“UserTable”)。find(“#123”)。remove();' – TomatoLion 2014-09-23 12:52:08

+0

是的,或者你可以改变jQuery选择器以适合你的表。你的表格行目前的样子是什么? – stovroz 2014-09-23 12:53:31

+0

我以前写的评论对我不起作用。我的表格行看起来像[this](http://gyazo.com/adb43a2e0aade1e319b89a50941327de) – TomatoLion 2014-09-23 12:56:56

0

由于表格在刷新页面时正在更新,因此可以推断出后端正在被正确更新,这是前端的问题。既然你没有说你用什么来显示你的数据,我会假设它是来自快速谷歌搜索的数据表。

stackoverflow.com/questions/20522440/fndraw-on-datatables-not-working

已与方法fnDraw()没有正确重绘表类似的问题。我建议你使用他的例子,通过改变你的成功处理程序

function OnDeleteSuccess(data) 
{ 
    alert("success"); 
    $("#UserTable").fnUpdate('Example update', 0, 0); // Single cell. Will redraw by default 
} 

而不是你目前的解决方案,看看是否有效。

+0

我已经添加了'UserTable'代码。您的示例不适用于我:( – TomatoLion 2014-09-23 12:28:15

+0

)您可以添加其余的你的代码,表格的html以及用于初始化它的JavaScript – DGS 2014-09-23 12:52:35

+0

我已经添加了所有与删除项目相关的代码:输入字段,Ajax调用,控制器的动作和表的代码。也许我错了,我错过了,但我还没有更多的东西.. – TomatoLion 2014-09-23 13:00:00