2012-03-13 39 views
-1

我有我的asp.net MVC中的以下观点: -怎么点击删除链接后删除从我的Razor视图对象

@foreach (var item in Model) { 
     <tr > 

      <td> 
       @Html.DisplayFor(modelItem => item.UserID) 
        <td id ="userclass"> 
        @Ajax.ActionLink("Add User to Class", 
    "Register", "User", 
    new { id = item.UserID, classid = ViewBag.id }, 

    new AjaxOptions { 

     InsertionMode = InsertionMode.InsertAfter, 
     HttpMethod = "POST", 
     UpdateTargetId = "incrementadd", 
     LoadingElementId = "progressToadd", 
OnSuccess = "removerow" 


}) 
</td> 

我需要删除的表行包含的对象加入;我试图定义onsuccess"removerow"与下面的脚本上述AJAX链接里面,但它没有工作: -

function removerow() { 

    jAlert('The Answer was added succsfully', 'Add Confirmation'); 

    var self = this; 
    $(self).remove(); 
    });} 

所以我怎么能做到这一点? BR

回答

4

由于您正在讨论删除某行并向我们显示关于添加类的代码,因此您的问题有点奇怪。然后你谈谈一个removerow回调。事情在你的问题中并没有真正相关。但无论如何,两种可能性浮现在脑海:

  1. 有您正在使用AJAX调用删除的答案返回包含表的局部视图,然后替换与此部分的成功回调表中的控制器动作。
  2. 在客户端上的成功回调

第一种方法的缺点是,你需要执行额外的SQL查询来重新获取,允许您最初生成表,但可以确保数据集中删除相应的行你会得到正确的数据。使用第二种方法,如果您只使用javascript删除相应的行,则可能有其他用户在同一时间删除了其他行,并且您将无法获得数据的正确表示。

所以在第一种方法你外部化表到部分:

<div id="incrementadd"> 
    @Html.Partial("_Table", Model.Answers) 
</div> 

,然后在你的删除操作:

[HttpPost] 
public ActionResult Delete(int id) 
{ 
    1. Delete the record with the given id in your database 
    2. Refetch all the answers and pass them to the partial 

    return PartialView("_Table", answers); 
} 

在第二种方法中,你必须传递给成功回调的要删除的表格的当前行。为此,您可以将其分配一个唯一ID <tr>元素:

@foreach (var item in Model) 
{ 
    <tr id="[email protected]"> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserID) 
     </td> 
     <td id ="userclass"> 
      @Ajax.ActionLink(
       "Delete answer", 
       "Delete", 
       "Answers", 
       new { 
        id = item.ID, 
       }, 
       new AjaxOptions { 
        HttpMethod = "POST", 
        OnSuccess = string.Format(
         "deleteSuccess({0})", 
         Json.Encode(item.ID) 
        ), 
        LoadingElementId = "progressToadd" 
       } 
      ) 
     </td> 
    </tr> 
} 

deleteSuccess

var deleteSuccess = function(rowid) { 
    $('#row' + rowid).remove(); 
}; 
+0

遗憾的不一致,我已经编辑我的问题,包括正确的代码。我想要做的是删除添加的对象,而不是删除。 – 2012-03-13 14:08:32

+0

它工作正常;但是当我为表格行定义ID时,我应该使用@row吗?因为我尝试了下面的,它工作正常。那么使用tr id =“[email protected]”> – 2012-03-13 18:56:47

+0

它们之间有什么区别?这将取决于这些ID的格式。如果它们是数字,如果使用'id =“123”',那么您将获得无效的HTML,因为ID不能以数字开头,而ID =“row123”可确保您获得有效的HTML。 – 2012-03-13 18:58:55