【问题标题】:Refreshing a MVC3 / MVC4 WebGrid without losing current page / filter在不丢失当前页面/过滤器的情况下刷新 MVC3/MVC4 WebGrid
【发布时间】:2012-07-05 01:39:00
【问题描述】:

我有一个绑定到普通类对象的 WebGrid。没有什么花哨。 Grid 具有一些分页功能,用于显示用户列表。网格的最后一列是一个 Ajax 动作链接,它触发带有一些编辑控件的弹出 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)

然后Ajax更新调用的onSuccess:

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
    }
}

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

【问题讨论】:

  • 您只想更新网格中已编辑的一行?将新数据发送到服务器并在弹出关闭时从 javascript 手动更新此行
  • 谢谢丹尼斯。我会将行标记为选中,以便在 Success 事件中获取它。标准的 WebGrid Helper 缺乏对添加行 ID 的支持,这在 imo 中有点愚蠢。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 2018-07-15
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多