Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ASP.NET MVC和jQuery仅刷新更新的行_Jquery_Html_Asp.net Mvc 3_Jquery Ui_Jquery Plugins - Fatal编程技术网

使用ASP.NET MVC和jQuery仅刷新更新的行

使用ASP.NET MVC和jQuery仅刷新更新的行,jquery,html,asp.net-mvc-3,jquery-ui,jquery-plugins,Jquery,Html,Asp.net Mvc 3,Jquery Ui,Jquery Plugins,我不熟悉ASP.NETMVC和jQuery,并尝试做一些经典的事情。我的需要是提供CRUD功能和弹出式编辑表单 我已经创建了一个表并显示了数据。我有一个部分视图呈现每个表行,索引视图在循环中调用它: <tbody> @foreach (var item in Model) { @Html.Partial("_OrderRow", item) } </tbody> 因此,在客户端的updateSuccess函数中,我有更新项目的HTML 之后,我只需使用jQuer

我不熟悉ASP.NETMVC和jQuery,并尝试做一些经典的事情。我的需要是提供CRUD功能和弹出式编辑表单

我已经创建了一个表并显示了数据。我有一个部分视图呈现每个表行,索引视图在循环中调用它:

<tbody>
@foreach (var item in Model)
{
    @Html.Partial("_OrderRow", item)
}
</tbody>
因此,在客户端的updateSuccess函数中,我有更新项目的HTML

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

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

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

我更喜欢这种方式,因为它不依赖于任何插件(尽可能),并控制我的视图。因此,我们非常感谢您的帮助


谢谢。

DOM是浏览器对内存中HTML的解释。表插件也必须在DOM上运行。你看到插件失败了吗?如果您对某个特定插件有疑问,这可能有助于引导讨论。为什么不替换整个表而不是一行?你有什么理由不能那样做吗?我会把整个表放在它自己的局部视图中……除非有特定的原因,否则你不会这样做。@Mike:例如,jQuery DataTables插件,当我像前面所说的那样刷新更新的字段时,它会失去样式等等,因为它是一个新的。所以我调用fnDraw()函数来刷新表。我希望它能改变整个桌子的样式,包括我的新桌子。但它会呈现旧的HTML(使用旧值),因为实际的HTML(当我查看页面源代码时)不会更改。创建一个带有一些s的表。2.使用jQueryDataTables插件(而不是服务器端)3设计它。使用jQuery的replaceWith函数将其中一个替换为新的(更改其中的一些值)。你会看到它失去了它的风格,排序等。调用其fnDraw()函数刷新这些。你会看到旧的值又回来了。噢,我明白问题所在了,至少在数据表方面是这样。该插件有自己的用于添加行的API(
fnAddData
)。
fnDraw()
删除该行的原因是插件保留自己的DOM内部副本,并在调用该方法时呈现该副本。看起来有些函数可以获取外部数据(
fnAddTr
)。我希望其他表插件也有类似的API,如果您要添加自己的行,您需要调用这些API。DOM是浏览器对内存中HTML的解释。表插件也必须在DOM上运行。你看到插件失败了吗?如果您对某个特定插件有疑问,这可能有助于引导讨论。为什么不替换整个表而不是一行?你有什么理由不能那样做吗?我会把整个表放在它自己的局部视图中……除非有特定的原因,否则你不会这样做。@Mike:例如,jQuery DataTables插件,当我像前面所说的那样刷新更新的字段时,它会失去样式等等,因为它是一个新的。所以我调用fnDraw()函数来刷新表。我希望它能改变整个桌子的样式,包括我的新桌子。但它会呈现旧的HTML(使用旧值),因为实际的HTML(当我查看页面源代码时)不会更改。创建一个带有一些s的表。2.使用jQueryDataTables插件(而不是服务器端)3设计它。使用jQuery的replaceWith函数将其中一个替换为新的(更改其中的一些值)。你会看到它失去了它的风格,排序等。调用其fnDraw()函数刷新这些。你会看到旧的值又回来了。噢,我明白问题所在了,至少在数据表方面是这样。该插件有自己的用于添加行的API(
fnAddData
)。
fnDraw()
删除该行的原因是插件保留自己的DOM内部副本,并在调用该方法时呈现该副本。看起来有些函数可以获取外部数据(
fnAddTr
)。我希望其他表插件也有类似的API,如果您要添加自己的行,则需要调用这些API。
    [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);
    }