使用jquery更新Ajax.RouteLink参数

使用jquery更新Ajax.RouteLink参数,jquery,asp.net-mvc,ajax,Jquery,Asp.net Mvc,Ajax,我有一个表格,列出了在我的网站上注册的用户。该页面包含一个类似于过滤器的文本框:一旦用户在文本框中键入内容,表就会被过滤,因此只检索名称包含文本框值的用户 这是使用jquery完成的。它发送到控制器操作,该操作返回一些json,并对其进行解析,以更新用户列表。这很有效 现在,此用户列表中必须有分页。非常简单,只有“上一个”和“下一个”按钮,它将获取上一个或下一个10个结果。这些是Ajax.routeLink。但是,我当然必须将正确的页码发布到控制器操作,以便它知道要检索哪些用户。问题就在这里:我

我有一个表格,列出了在我的网站上注册的用户。该页面包含一个类似于过滤器的文本框:一旦用户在文本框中键入内容,表就会被过滤,因此只检索名称包含文本框值的用户

这是使用jquery完成的。它发送到控制器操作,该操作返回一些json,并对其进行解析,以更新用户列表。这很有效

现在,此用户列表中必须有分页。非常简单,只有“上一个”和“下一个”按钮,它将获取上一个或下一个10个结果。这些是Ajax.routeLink。但是,我当然必须将正确的页码发布到控制器操作,以便它知道要检索哪些用户。问题就在这里:我不知道怎么做。从何处获取此值?我试过:

  • 在控制器中设置ViewData键,但当我返回Json结果时,该值永远不会更新
  • 我尝试在json结果中添加上一页和下一页的页码,但结果如何?RouteLink生成一个包含各种数据的长链接,我不知道如何使用jquery轻松修改其中的一些参数
  • 我试图生成链接服务器端并将其添加到Json中,但我无法从控制器访问ViewContext,这是在我的操作中实例化新AjaxHelper所需的。或者别的什么
如果有帮助,下面是一些代码。正如您在jquery代码中所看到的,正确的页码会在那里发出警报。但是如何让它进入常规呢?或者其他聪明的方法来实现这一点?谢谢

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");
}
<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);
}

我只是遇到了同样的问题,并找到了一个非常简单的解决方案。在花了一天多的时间摆弄桌子和其他东西之后,我下载了这个不错的组件。
由于它没有完全实现我想要的功能(实时过滤),我编写了一个小的JQuery插件来处理这个缺失的功能

对于使用文本框进行过滤,您必须执行以下操作:在插件源代码中查找此行

// Binding the Button events

$('.' + opts.applyButtonClass).click(function () {
    ...
现在用keyup替换click部分,就这样了


我建议实现最少的字母数,这样就不会过滤一个“a”,而是在指定的长度后应用过滤器,如:
textbox.val().length>3

我遇到了同样的问题,找到了一个非常简单的解决方案。在花了一天多的时间摆弄桌子和其他东西之后,我下载了这个不错的组件。
由于它没有完全实现我想要的功能(实时过滤),我编写了一个小的JQuery插件来处理这个缺失的功能

对于使用文本框进行过滤,您必须执行以下操作:在插件源代码中查找此行

// Binding the Button events

$('.' + opts.applyButtonClass).click(function () {
    ...
现在用keyup替换click部分,就这样了


我建议实现最少的字母数,这样就不会过滤“a”,而是在指定的长度后应用过滤器,如:
textbox.val().length>3

感谢您的延迟回复!目前还没有开发MVC应用程序,但一旦我回到MVC应用程序,我一定会尝试一下:-)谢谢你的回复!目前还没有开发MVC应用程序,但我一回到MVC应用程序,肯定会尝试一下:-)