在DateTime LastUpdated列上使用Html.hidden进行版本跟踪时,MVC.NET毫秒丢失

Arj*_*anW 6 sql versioning asp.net-mvc datetime

问题简而言之:

如何在MVC.NET中做到一点?

长版问题:

我试图在SQL表中使用DateTime列进行版本跟踪(这本身就是一个解决方案,用于在通过表的editview传回后重新附加Linq2Sql数据类)

但现在我得到"没有找到或改变行" - 异常.在ctx.submit上:

 ctx.appointments.Attach(appointment,true);
 ctx.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

其中ctx是我的Linq datacontext,约会我的表,并预约我试图附加的约会对象..我已将约会表设置为sugested here

建议的解决方案的读者也注意到了这个问题.他认为是一个解决方案.

这里的问题是我不使用webforms,我使用MVC.NET.所以我猜测正在使用

            <%= Html.Hidden("LastUpdate", Model.LastUpdate) %>                
Run Code Online (Sandbox Code Playgroud)

使LastUpdate属性更改.那么有什么方法可以确保在传回我的更新操作时获得相同(或至少相等)的DateTime对象?

我在更新约会表时使用建议的gettime()触发器.这显然存储了一个sql datetime对象.这可能不是由Linq2SQL精确解析的.我想这也增加了问题.

我希望有一个解决方案.我知道只使用时间戳格式也可以解决它..但这超出了这个问题的范围

Alc*_*nja 5

我认为问题在于将上次更新时间写到这样的隐藏字段中只会ToString在默认情况下不显示毫秒的日期上执行一个操作。您可以尝试将时间戳渲染为一些绝对值,例如刻度:

<%= Html.Hidden("LastUpdate", Model.LastUpdate.Ticks) %>
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过将值转换回long并重构DateTime来在另一端重构日期时间:

var dt = new DateTime(Int64.Parse(ticks));
Run Code Online (Sandbox Code Playgroud)