我有一个渲染WebGrid的局部 View 。我的 Controller 看起来像

public ActionResult Index()
{
    return View();
}
public ActionResult GetUserList(int? page, string sort, string sortdir)
{
    var model = UserModel.getList(page,sort,sortdir);
    return PartialView("_UserList",model);
}

Index.cshtml:
....
@Html.Action("GetUserList")
问题是,每次我单击网格导航或排序链接时,它都会调用Index方法。如何使Webgrid执行其他操作(在这种情况下为GetUserList)?我敢肯定,我可以使用jQuery将GetUserList前缀添加到网格中的所有链接上,但是我认为这应该是一种更好的方法。
我所做的事情也有可能是完全错误的,因此感谢您的建议。

最佳答案

经过大量的探索和挖掘(甚至不喜欢Reflector与WebGrid的源代码),我得出的结论是,使用WebGrid,您无法控制/更改Header链接操作。

要创建标题链接URL,该路径取自HttpContext.Request.Path,因此无法自定义它以指向其他路由。

一种非常丑陋的破解方法是利用jQuery Ajax的事件(因为标题链接使用jQuery.load进行排序)并覆盖URL:

<a href="#" onclick="$('#myGrid').load('/?sort=AlbumId&amp;sortdir=ASC&amp;__=634486582282704242 #myGrid');">Album Id</a>

更好的解决方案是使用:
  • Telerik Grid,您可以指定custom routes,并且在呈现布局时提供更大的灵活性
  • MvcContrib Grid(不确定是否可以让您修改标题链接,但肯定比WebGrid更具灵活性)
  • 关于asp.net-mvc-3 - 如何更改WebGrid操作以获取数据(.NET MVC3),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5968169/

    10-10 22:34