在不丢失当前页面/过滤器的情况下刷新MVC3 / MVC4 WebGrid

时间:2012-07-04 14:24:39

标签: c# jquery ajax asp.net-mvc-3 webgrid

我有一个绑定到Plain Class Object的WebGrid。没有什么花哨。网格具有一些分页功能,用于显示用户列表。 Grid的Last列是一个Ajax Action Link,它使用一些Edit控件触发Pop Up DIV。完成此编辑后,OnSuccess事件将触发并关闭DIV。这是我现在想要刷新网格而不会丢失当前页面/搜索/过滤器的地方。想到的一种方法是以某种方式获取WebGrids Url,然后使用JQuery刷新它,但是..我找不到一种方法来检索当前的url和参数?有人试过这个吗?

更新:感谢答案,这就是我现在所采用的方法:)

由ajax编辑调用的ActionResult

[HttpPost]
public ActionResult EditUserDetails(User model)
{
    if (ModelState.IsValid)
    {
        // for the sake of brevity.

        // do your edit logic here and then on success you return:

        return Json(new { state = "success", id = "1", name = "John", surname = "Doe", etc = "blah" });
    }
    else
    {
        return Json(new { state = "failed", message="some error text here maybe?" });
    }
}

然后在编辑单击中,我将行的类设置为.editRowSelected。 (我将把它改成id而不是)

然后onSuccess的Ajax更新调用:

function onSuccess(ajaxContext) {
    var result = eval(ajaxContext);
    if (result.state == "Success") {

        var row = $('.busyEditRow');
        row.html(content);

        $('.busyEditRow').removeClass('busyEditRow');
    }
    else {
        // Display some error stuffs here with the message - result.message
    }
}

这将使用新数据更新网格行:)

1 个答案:

答案 0 :(得分:1)

刚刚编辑了一条记录,而不是刷新整个网格,然后必须回发应用的过滤器,当前页面等,我的控制器中会有一个函数返回包含单个用户数据的局部视图。

你可以在DIV关闭后通过AJAX调用它,并使用jQuery用从函数返回的HTML替换网格中的行。

只要网格中的每一行都可以通过id识别,它就足够简单,可以找到相关的行并替换它。