2009-09-14 57 views
1

我有一張表列出了在我的網站上註冊的用戶。該頁面包含一個充當過濾器的文本框:只要用戶在文本框中鍵入內容,該表就會被過濾,因此只有檢索到名稱包含文本框值的用戶。使用jquery更新Ajax.RouteLink參數

這是使用jQuery做。它發佈到一個控制器動作,它反過來返回一些json,解析這個動作以更新用戶列表。這很好。現在

,該用戶列表必須對自己的分頁。很簡單,只有前一個和下一個按鈕,它們將獲取前一個或下一個10個結果。這些是Ajax.RouteLinks。但是,我當然必須將正確的頁碼發佈到控制器操作,以便知道要檢索哪些用戶。這就是問題所在:我不知道該怎麼做。我從哪裏得到這個價值?我試過了:

  • 在控制器中設置一個ViewData鍵,但是當我返回一個Json結果時,這個值永遠不會更新。
  • 我試圖在JSON結果添加一個和下一個頁面編號,但是然後呢?該Ajax.RouteLink產生與各種數據的長鏈接,我不知道怎樣才能使用jQuery來輕鬆地修改一些參數有
  • 我試圖生成鏈接的服務器端,並添加到JSON,但我無法從控制器訪問ViewContext,這需要在我的操作中實例化新的AjaxHelper。管他呢。

如果有幫助,下面是一些代碼。正如你在jQuery代碼中看到的那樣,正確的pagenumbers會在那裏被提醒。但是,如何將其納入路線連接?或者其他任何聰明的方式來實現這一點?謝謝!

jQuery代碼:

function searchUsers() { 
    $.post("/Search/Users", $("#searchUsersForm").serialize(), function(data) { 
    $('#searchResultsTable tr').remove(); 
    $.each(data.Result, function(index, result) { 
     $('#searchResultsTable').append('<tr><td>' + result.Username + '</td></tr>'); 
    }); 
    if (data.PreviousPageNumber != null) 
     alert('previous: ' + data.PreviousPageNumber); 
    if (data.NextPageNumber != null) { 
     alert('next: ' + data.NextPageNumber); 
    } 
    }, "json"); 
} 

HTML:

<form id="searchUsersForm"> 
     <input type="text" name="userName" id="userName" onkeyup="searchUsers()" onchange="searchUsers()" /> 
</form> 

<% 
Response.Write("<span class='pagingPrevious'>" + Ajax.RouteLink("< previous", "User-List", new { pageNumber = ((int?)ViewData["PreviousPageNumber"]).Value }, new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "profilePageInbox" }) + "</span>"); 

Response.Write("<span class='pagingNext'>" + Ajax.RouteLink("next >", "User-List", new { pageNumber = ((int?)ViewData["NextPageNumber"]).Value }, new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "profilePageInbox" }) + "</span>"); 
%> 

控制器:

public ActionResult SearchUsers(string userName) 
{ 
     // fetch data 

     ViewData["PreviousPageNumber"] = userViewModel.PreviousPageNumber; // does not work 
     ViewData["NextPageNumber"] = userViewModel.NextPageNumber; // does not work 
     return this.Json(userViewModel); 
} 

回答

1

我只是有相同的親瑕疵和發現一個相當簡單的解決方案花了一天多的時間修改桌子和東西之後,我下載了這個很好的組件Telerik Asp.Net MVC Grid
因爲它沒有這樣做正是我想(活過濾)我寫了一個小的jQuery插件來處理這個功能缺失Gridfilter Plugin

對於一個文本框,過濾你必須做到以下幾點:找到這一行在插件的源

// Binding the Button events 

$('.' + opts.applyButtonClass).click(function() { 
    ... 

現在更換KEYUP點擊一部分,你去那裏。

我會指定的長度等之後建議實施最低的字母以及使只是一個「一」就不會得到過濾,而不是會應用過濾:textbox.val().length > 3

+0

感謝您的答覆遲到了!目前沒有在MVC應用程序上工作,但只要我回到一個,我會定義嘗試一下:-) – Razzie 2010-05-12 14:45:13