我在发布之前重写了标题和内容3次,我找不到正确的方式来问这个:P
我有一个管理笔记列表的页面,我在该页面上有一个CRUD,但项目是在javascript中创建和保存的(使用knockoutjs)。
我创建了一个新笔记,我将其添加到javascript中的模型中,并显示在页面中。
我将笔记保存到数据库的方式是当我将其添加到模型时,我通过Ajax(异步)将其发送到服务器。所以我在屏幕和数据库中的注释非常快。
我向服务器发送没有Id的注释,EF会处理Id。
到目前为止一切顺利。
想象一下,我添加了一个注释,但我不刷新网页,因此注释在数据库中,也在javascript模型中,但在模型中它还没有id。
我对笔记进行了一些更改,是的,我想更新数据库中的笔记...但是......怎么样?
我将我的笔记发送给服务器并附上更改,但请记住,该项目仍然没有ID,所以我不能说:
嘿EF,给我ID == xx的笔记,我们将更新该笔记。
可以在网页上更改其他属性,因此除了ID之外,我没有任何标识该笔记的内容,而ID在此处不起作用。
我试过了:
将新笔记发送到服务器,将其插入数据库,再次检索(选择ID),将其发送回javascript并使用Id更新对象。因此,当我编辑时,我有Id。是的,但“保存”呼叫需要同步并破坏体验。
有什么想法吗?
编辑:最后的同步选项并不慢,但必须有一种异步方式,就像“插入数据库”,“检索我插入的最后一项”并且“回到客户端”有点hackish。
答案 0 :(得分:1)
您可以在异步调用中返回新记录的ID。如果您使用的是jQuery,则可以订阅“success”回调,只要您的控制器返回具有新记录ID的JSON,您就可以在客户端更新您的模型。
即使采用这种方法,您也需要有一种方法来识别客户端更新的项目(这实际上是您问题的根源。)为此,您可以在客户端生成随机GUID,发送它在保存时保存到服务器,并在返回ID时将其返回给jQuery,以便您可以识别要在页面上更新的正确元素。