2012-03-29 25 views
0

Hier ist meine Einrichtung. Ich habe Telerik Grid. Hier ist was der .cshtml.Controller-Methode wird 2 auf Search Schaltfläche klicken klicken

@(Html.Telerik().Grid<UserViewModel>().Name("UserGrid") 
     .DataBinding(binding => binding.Ajax().Select("List", "Account", Model.ToRoute(Html)) 
               .Insert("Insert", "Account") 
               .Delete("Delete", "Account") 
               .Update("Save", "Account")) 
     .DataKeys(keys => keys.Add(model => model.UserName)) 
     .ToolBar(toolbar => toolbar.Template(@<text> 
       @Html.Partial("GridSearchTool") 
      </text>)) 
     .Columns(columns => 
     { 
      columns.Bound(u => u.Email) 
        .EditorTemplateName("EmailAddress") 
        .Filterable(true) 
        .Sortable(true) 
        .Width(300); 
     }) 
     .Pageable() 
     .Filterable() 
     .Reorderable(reordering => reordering.Columns(true)) 
     .Scrollable(scrollable => scrollable.Height(500).Enabled(false)) 
     .Editable(editing => editing.Enabled(true) 
            .DisplayDeleteConfirmation(true) 
            .Mode(GridEditMode.PopUp) 
            .TemplateName("UserEditor")) 
     .ClientEvents(events => events.OnEdit("onRowEdit") 
             .OnError("onGridError") 
             .OnLoad("gridLoaded") 
             .OnDataBinding("gridAjaxBinding") 
             .OnDataBound("gridAjaxBound") 
             .OnSave("gridAjaxSaved")) 

Hier ist ein Eintrag in meinem Global.ascx für Routen.

Sie werden sehen, dass ich die Suche als Teilansicht in meiner Grid-Symbolleiste platziert habe. Es läuft als ein Textfeld, Schaltflächen (Suchen und Löschen).

Hier ist der Screenshot.

Image of my page

Als ich das Gitter in meinem Controller hier laden sind die Funktionen/Aktionen es nennt. 1) Aktionsindex 2) Aktionsliste

Hier sind die Beispiele.

public ActionResult Index(string username) 
     { 
      return View(new GridViewModel 
      {     
       Query = username, 
       QueryField = "Email", 
       GridName = "UserGrid", 
       Controller = "Account" 
      }); 
     } 

    [Authorize(Roles = "Administrator")] 
     [GridAction] 
     public ActionResult List(string username)   
     { 
      return Json(GetGridModel(DatabaseContext.FromContext())); 
     } 

Das funktioniert gut, wenn ich zuerst das Raster lade. Jetzt habe ich viele Daten auf meiner Seite und ich möchte einen bestimmten Datensatz finden, so dass ich meine Abfrage oder Zeichenfolge in das Textfeld in der Suchtext eingeben. Wenn ich das tue, werden hier die Controller-Methoden aufgerufen.

1) Index (mit Abfrage in dem Suchfeld eingegeben) 2) Liste (mit Abfrage in dem Suchfeld eingegeben) 3) Liste (mit Abfrage in dem Suchfeld eingegeben)

Ich weiß nicht, warum es hat die List-Methode mehrfach mal aufgerufen. Ich habe auch versucht, die Global.ascx Routen mit dem Aufruf einer anderen Methode anstelle von Index ändern, aber das funktioniert nicht. Es hat den Index immer noch mehrere Male aufgerufen.

Ich würde über jede Hilfe oder Ideen in Bezug auf dieses Problem freuen.

Auch hier sind einige Javascript-Methoden.

Danke für die schnelle Antwort. Hier sind beide Methoden, die ich in einem der Java-Skripte gefunden habe.

gridAjaxBinding = function (evt) { 
     var grid = $(evt.target); 
     if (grid.length) { 
      grid.block({ 
       message: '<div class="loading"><img src="/Content/images/busy.gif"><span>Loading...</span></div>' 
      }); 
     } 
    }; 
gridAjaxBound = function (evt) { 
     var grid = $(evt.target); 
     if (grid.length) { 
      grid.unblock(); 
     } 

     grid.unbind('edit', gridAjaxEditing); 
     grid.bind('edit', gridAjaxEditing); 

     var gridId = '#' + grid.attr('id'); 

     // Get the export link as jQuery object 
     var $exportLink = $('#export'); 
     if ($exportLink.length) { 
      grid = grid.data('tGrid'); 
      // Get its 'href' attribute - the URL where it would navigate to 
      var href = $exportLink.attr('href'); 

      // Update the 'page' parameter with the grid's current page 
      href = href.replace(/page=([^&]*)/, 'page=' + grid.currentPage); 

      // Update the 'orderBy' parameter with the grids' current sort state 
      href = href.replace(/orderBy=([^&]*)/, 'orderBy=' + (grid.orderBy || '~')); 

      // Update the 'filter' parameter with the grids' current filtering state 
      href = href.replace(/filter=(.*)/, 'filter=' + (grid.filterBy || '~')); 

      // Update the 'href' attribute 
      $exportLink.attr('href', href); 
     } 

     setupContextMenu(grid); 
    }; 

Danke, Vivek

Antwort

0

Dies ist höchstwahrscheinlich auf die JavaScript-Code, den Sie schreiben nicht. Dieses Verhalten tritt auf, wenn Sie die grid.filter(...) Methode in gridAjaxBinding oder gridAjaxBound aufrufen. Ich sah das gleiche Problem und es war im Zusammenhang mit der Einstellung grid.filter zweimal. Der folgende Code funktioniert für uns (übermäßig vereinfacht):

$("#button").on("click", function (event) { 
    event.preventDefault(); 
    evo.filterGridData(); 
}); 

evo.filterGridData = function filterGridData() { 
    var searchTerm = $("#searchTerm").val().replace(/'/g,"''"); 
    var grid = $("#grid").data("tGrid"); 
    grid.filter("substringof(FieldToSearchFor,'" + searchTerm + "')"); 
}; 
+0

Hallo, ich habe diese beiden Methoden zu meiner Frage hinzugefügt. Können Sie sie bitte überprüfen und lassen Sie mich wissen, wenn etwas mit ihnen nicht stimmt? Ich werde auch versuchen, diese Methoden zu debuggen. Danke für Ihre Hilfe. –

+0

In Ihrem Code ist nichts verdächtig. Was passiert, wenn Sie 'gridAjaxBound' leer lassen? Vielleicht gibt es etw. in 'setupContextMenu' oder der Suchknopf löst eine doppelte Bindung aus. – Andreas

+0

Ich fand 1 mehr Ding. In meiner GridSearchTool-Ansicht habe ich dies unter dem Code dojo.addOnLoad (function() { applyGridFilter ('# @ Model.GridName', '@ Model.QueryField', '@ Html.Raw (Model.Abfrage) ',' substringof '); }); Dieser Code ruft die Funktion applyGridFilter auf und ruft dort die Funktion tGrid.filter auf. Hier ist der Code der Funktion. Ich kann diese Funktion kopieren, wenn Sie überprüfen möchten? –

Verwandte Themen