2016-07-03 6 views
0

bekommen, vor kurzem stieß ich mit dem verwirrten proplem.Daten zwei Mal an die Tabelle anhängen, wenn Daten vom Controller (Jquery Ajax)

ich möchte verzögertes Laden nach dem Balg Link: ASP.NET MVC Infinite Scrolling Jquery

wenn Projekt laufen und verwendet, um eine Funktion, die umgesetzt werden. alles funktioniert einwandfrei, aber jquery nicht. es meine Daten zwei Mal sehen Bild anhängen: pay attention to first field which is a number

alles ok ist (firebug korrekten Daten zeigen), aber was war es geschehen.

meine Jquery-Code ist:

var page = 1; 
 
var scrollHandler = function() { 
 
    if (($(window).scrollTop() == $(document).height() - $(window).height())) 
 
     loadMoreToInfiniteScrollTable(); 
 

 
} 
 

 
function loadMoreToInfiniteScrollTable() { 
 
    page++; 
 
    $.ajax({ 
 
     type: 'GET', 
 
     url: dataUrl, 
 
     data: "p=" + page, 
 
     success: function (data) { 
 
      if (data) { 
 
       $('tbody').append(data); 
 
       
 
     } 
 
     } 
 
    }); 
 
    
 
}

Aufruf der Methode

<script type="text/javascript"> 
 
     var dataUrl = '@Url.RouteUrl("UserInfo")'; 
 
     $(window).scroll(scrollHandler); 
 
    </script>

Controller Aktionsmethoden: seine bevöl Ansicht einmal

public List<inf> lst; 
    public ActionResult ExpressionDetail() 
    { 
     var data = lst.Where(f=>f.id>0&&f.id<lenght).OrderBy(i=>i.id); 

     return View(data); 
    } 

und die Teilansicht für Seite sepration:

[HttpGet] 
    public ActionResult _TableData(int? p=0) 
    { 
     int firstfrom = p ?? 1; 
     int endfrom = (firstfrom > 1 ? (firstfrom - 1) * lenght : 0); 

     var g= lst.OrderBy(i=>i.id).Skip(endfrom-1).Take(lenght).AsEnumerable(); 

     return PartialView(g); 
    } 

Route config:

routes.MapRoute("UserInfo", "",new {Controller= "Default", Action= "_TableData" }); 

konst Länge:

public const int lenght = 15; 

partialview:

@model IEnumerable<testable.Models.inf> 

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.id) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.name) 
    </td> 

</tr> 

}

und Hauptansicht:

@model IEnumerable<testable.Models.inf> 
<!DOCTYPE html> 

<html> 
<head> 
<meta name="viewport" content="width=device-width" /> 
<title>ExpressionDetail</title> 
</head> 
<body> 

<table class="table"> 
    <tr> 
     <th> 
      Id 
     </th> 
     <th> 
      name 
     </th> 
    </tr> 
@Html.Partial("_TableData", Model) 
    <tbody> 

    </tbody> 

</table> 

</body> 
</html> 

inf Modell

public class inf 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 
+1

Zeigen Sie die Controller-Methode Ihre Berufung und der Blick es gibt (und das Aussehen aß dem HTML-Code Ihren Stromerzeuger - beste Vermutung ist, dass Sie mehr '' Elemente haben –

+0

jawohl, im Show Controller-Methode, meine Berufung ist der zweite Teil von Javascript, das oben zeigt, ich meine nicht mehrere tbody PLZ zeigen Sie mir – Persiax

+0

Sie haben immer noch nicht Teilansicht gezeigt :) Und was ist der Wert von 'length' (ich nehme seine 10?) –

Antwort

0

meine nur Probleme gelöst durch eine der tbody entfernen, so dass hinter dem Sinn erzeugt zwei tbody so durch avoid <tbody></tbody> explicitely unsere Probleme gelöst und es funktioniert einwandfrei.

tnx und Glückwünsche von Herrn Stephen Muecke