2

我是 ASP.NET MVC 和 jQuery 的新手,正在尝试做一些经典的事情。我的需要是通过弹出编辑表单提供 CRUD 功能。

我创建了一个表格并显示数据。我有一个局部视图渲染每个表行,索引视图在循环中调用它:

<tbody>
@foreach (var item in Model)
{
    @Html.Partial("_OrderRow", item)
}
</tbody>

每行都有一个编辑按钮,当我单击它时,会打开一个 jQuery 弹出表单并加载编辑表单。当我单击更新按钮时,它会成功执行操作(使用 ajax 请求)并返回一个 JsonResult,其中包括使用更新的项目呈现的部分视图(_OrderRow):

    [HttpPost]
    public JsonResult OrderEdit(OrderViewModel order)
    {
        if (ModelState.IsValid)
        {
            Order ord = OrderMapper.MapToEntity(order);

            db.Orders.Attach(ord);
            db.ObjectStateManager.ChangeObjectState(ord, EntityState.Modified);
            db.SaveChanges();

            return Json(new { Success = true, ObjectId = order.Id, Html = RenderPartialViewToString("_OrderRow", order) }, JsonRequestBehavior.DenyGet);
        }

        return Json(new { Success = false, Object = order }, JsonRequestBehavior.DenyGet);
    }

因此,在客户端的 updateSuccess 函数中,我有更新项目的 HTML。

之后,我只需使用 jQuery 获取相应的表格行,然后使用 replaceWith 将其替换为我的最新表格行。

到目前为止,这种情况运行良好。但我的问题是它不会改变实际的 HTML,它只会操纵 DOM。因此,如果我在尝试刷新表格(样式、分页等)时使用一些表格插件(如 DataTables、TableSorter 等),它们会忽略我的新表格行。因为实际的 HTML 包含旧的。

当我插入新行或删除时,我似乎会遇到同样的问题。

我更喜欢这种方式,因为它不依赖任何插件(尽可能)并控制我的视图。因此,任何帮助将不胜感激。

谢谢。

4

0 回答 0