как удалить объект из моего вида бритвы после нажатия на ссылку удаления - PullRequest
0 голосов
/ 13 марта 2012

у меня в MVC asp.net следующее представление: -

 @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

1 Ответ

4 голосов
/ 13 марта 2012

Ваш вопрос немного странный, поскольку вы говорите об удалении строки и демонстрируете нам код добавления классов. Тогда вы говорите о removerow обратном вызове. Вещи на самом деле не связаны в вашем вопросе. Но в любом случае на ум приходят 2 варианта:

  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);
}

При втором подходе к успешному обратному вызову необходимо передать текущую строку таблицы, которую нужно удалить. Для этого вы можете назначить ему уникальный идентификатор для элемента <tr>:

@foreach (var item in Model) 
{
    <tr id="row@item.ID">
        <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();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...