2016-08-22 3 views
0

У меня есть интересная проблема при перезагрузке частичных представлений с помощью ajax. У меня есть следующие настройки в главном Вид:Перезагрузка частичных представлений и Ajax - ASP.NET MVC

<div> 
    <div id="items"> 
     @Html.Partial("SubView", Model.Items); 
    </div> 
<div> 

подвид, как правило, список элементов в таблице следующим образом:

<table class="table table-striped"> 
    <tr> 
     <th>Date</th> 
     <th>Time</th> 
     <th></th> 
</tr> 
@foreach (var item in Model) 
{ 
    <tr> 
     @Html.HiddenFor(modelItem => item.Id) 
     <td>@Html.DisplayFor(modelItem => item.Date)</td> 
     <td>@Html.DisplayFor(modelItem => item.Time)</td> 
     <td> 
      @Html.ActionLink("Delete", "Delete", new { itemId= item.Id, page = Model.PageNumber }, new { @class = "deleteItem" }) 
    </td> 
</tr> 
} 

DeleteItem Действие в контроллере делает в основном следующие :

[HttpDelete] 
    public ActionResult DeleteItem(int itemId, int page) 
    { 
     this.dbService.DeletItem(expenseId); 
     return PartialView("SubView", this.GetPagedList(page)); 
    } 

В сценарии, который я называю в представлении мастера, у меня есть follo Код крыла:

$(document).ready(function() { 
// delete expense 
$(".deleteItem").click(function() { 

    $.ajax({ 
     url: this.href, 
     type: 'delete', 
     success: function (result) { 
      $("#items").html(result); 
     } 
    }); 

    return false; 
}); 

Это прекрасно работает в первый раз, но второй раз он загружает только парциальное View -> так как код JavaScript не выполняется ...

Я относительно новым, что и я немного смущен тем, что здесь происходит. Все сторонние скрипты отображаются в Layout.cshtml

+0

Пожалуйста, пост вы DeleteItem полного кода, а –

+0

добавил, как я сказал, что это очень просто – Myar

ответ

1

Вы не можете подключить событие .click() к динамически генерируемому элементу. Вы должны структурировать это следующим образом:

$(document).on('click', '.deleteItem', function() { 
    // Deletey stuff here. 
}); 
+0

Спасибо, это недостающая часть. Тот же код, что и я, работал в предыдущем проекте, но там у меня есть скрипт прямо в моем главном представлении - возможно, поэтому он сработал. – Myar

+0

Это связано с тем, что динамически созданные элементы не являются частью DOM, когда документ загружается первым, то есть когда происходит привязка. Вышеприведенный код присоединяет событие '.click()' к 'document'. –

0

Для частичного вида, чтобы сделать, вы должны сделать тип возвращаемого PartialViewResult, а не ActionResult. Поскольку ActionResult вызывает перенаправление.

Попробуйте отредактировать функцию DeleteItem следующим образом.

[HttpDelete] 
    public PartialViewResult DeleteItem(int itemId, int page) 
    { 
     this.dbService.DeletItem(expenseId); 
     return PartialView("SubView", this.GetPagedList(page)); 
    } 
+0

Это ничего не изменило, к сожалению – Myar

Смежные вопросы