2017-02-20 22 views
0

Я пытаюсь фильтровать данные на основе запроса. Я использую частичное представление для отображения отфильтрованных данных. Однако в частичном представлении ничего не обновляется. Как я могу это исправить? КлассФильтровать данные на основе запроса и результата возврата с использованием частичного представления

Контроллер:

public IActionResult Index() { 
    IEnumerable<Organisation> organisations = _organisationRepository.GetAll().OrderBy(b => b.Name).ToList(); 

    if (isAjaxRequest()) { 
     string text = Request.Form["text"].ToString(); 
     return PartialView("_Organisations", _organisationRepository.GetByName(text).ToList()); 
     } 

     return View(organisations); 
    } 

private bool isAjaxRequest() { 
     return Request != null && Request.Headers["X-Requested-With"] == "XMLHttpRequest"; 
    } 

организации Вид:

<form asp-controller="Organisation" asp-action="Index"> 
<div class="form-inline"> 
    <div class="form-group"> 

     <label for="text">Filteren in organisaties</label> 
     <input type="text" name="text" id="text" required pattern="^([0-9]{4}|[a-zA-Z]+)$"> 

     <label for="selected"></label> 
     <select name="selected" id="selected" class="form-control"> 
      <option value="name">Naam</option> 
      <option value="postalcode">Postcode</option> 
     </select> 
    </div> 

    <button type="submit" class="btn btn-default" id="search">Zoeken</button> 
</div> 
</form> 

<div id="partial"> 
    @Html.Partial("_Organisations", Model); 
</div> 

Частичный вид:

<table class="table table-striped table-condensed table-bordered"> 
<tr> 
    <th>Naam</th> 
    <th>Adres</th> 
    <th></th> 
</tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @item.Name 
     </td> 
     <td> 
      @item.Location.ToString() 
     </td> 
     <td> 
      <a onClick="showForm(this, @item.OrganisationId)" href="#">Selecteer</a> 
     </td> 
    </tr> 
} 

Javascript Файл:

$("#search").click(function() { 
    $.ajax({ 
    url: "Organisation/Index", 
    type: "post", 
    data: $("form").serialize(), 
    success: function (result) { 
     $("#partial").html(result); 
     } 
    }); 
}); 

Любая помощь будет оценена!

ответ

0

Первый ответ (неверно): Если это не опечатка, вы забыли $ jquery $("#search").click(function() {.

Новый ответ: Я думаю, что вот ошибка: вы должны предотвратить нормальное поведение события click. Изменение яваскрипта функции (2 модификации):

 $("#search").click(function (e) { 

      e.preventDefault(); 

      $.ajax({ 
       url: "Organisation/Index", 
       type: "post", 
       data: $("form").serialize(), 
       success: function (result) { 
        $("#partial").html(result); 
       } 
      }); 
     }); 

Теперь функция принимает е (событие) в параметре и, прежде чем сделать вызов Ajax, мы должны вызвать e.preventDefault(); Исправлена ​​ошибка в том, что вызов Ajax возвратил частичный просмотр, #partial html был обновлен, но тогда нормальное поведение «щелчка» перезагрузило страницу запросом HTTP GET.

+0

Это была опечатка! Спасибо, что сообщили мне, я изменил его в вопросе! – dddroog

+0

Хорошо. В коде, который мы не видим, должна быть еще одна ошибка. Вы пытались проверить все звонки? 1. Поместите контрольную точку в свой javascript при вызове $ .ajax 2. Поместите контрольную точку у входа в контроллер действия индекса (работает в Visual Studio при отладке) 3. Вставьте результат частичного просмотра в переменную, прежде чем ее вернуть поставьте точку останова, чтобы убедиться, что вы получаете что-то из вида. 4. поместите вторую точку останова в Javascript, в функцию успеха Это хорошее начало. Сообщите нам, какие точки останова достигнуты или нет. –

+0

Хорошо, поэтому достигнуты первые две точки останова. Когда я продолжил отладку, я обнаружил что-то странное. Когда я не вводил текст внутри поля ввода html, текст переменной пуст в контроллере, и он возвращает частичное представление, содержащее все элементы, содержащие «пустую» строку, которые в моем случае являются всеми элементами. Странно, когда я ввожу текст в поле ввода html, контроллер возвращает View (организации), после чего возвращает частичный вид, но ничего визуального не изменяется на странице. – dddroog