MVC.NET毫秒快到版本跟踪一个DateTime LASTUPDATED列使用Html.hidden时,会丢失

问题描述 投票:6回答:5

问题在短期:

如何做TOT在this MVC.NET?

问题在长版:

即时试图在SQL表使用DateTime列进行版本跟踪(这本身提出作为一种解决方案通过为表EditView中来重新附接LINQ2SQL数据类被passedback之后)

但现在我得到“未找到行或changed'的异常。在ctx.submit:

 ctx.appointments.Attach(appointment,true);
 ctx.SubmitChanges();

其中CTX是我的LINQ的datacontext,约会我的表,预约约会对象我尝试将..香港专业教育学院设置的预约表作为sugested here

这个问题也被建议的解决方案的读者注意。他建议this作为解决方案。

这里的问题是我不是使用使用MVC.NET web表单,即时通讯。所以我用猜

            <%= Html.Hidden("LastUpdate", Model.LastUpdate) %>                

使得LASTUPDATE属性更改。那么,有没有一种方法,以确保我得到这个时候被传递回我的更新动作相同(或至少等于)DateTime对象?

即时通讯使用我的约会表的更新建议GETTIME()触发。这显然存储一个SQL DateTime对象。这可能不是由LINQ2SQL被precicely解析。我想这也增加了这个问题。

我希望有一个解决方案。我知道刚才使用时间戳格式会解决它也..但是这是这个问题的范围

sql asp.net-mvc datetime versioning
5个回答
5
投票

我认为问题是,写出的最后更新时间为隐藏字段一样,只会做一个ToString上默认情况下将不会呈现出毫秒的日期。你可以尝试呈现出时间戳一些绝对值如蜱:

<%= Html.Hidden("LastUpdate", Model.LastUpdate.Ticks) %>

然后,您可以通过将值回长和重建的DateTime重建你对对方的日期时间:

var dt = new DateTime(Int64.Parse(ticks));

4
投票

你不会相信我,但试试这个:您的控制器上的回报之前,做一次

ModelState.Remove("LastUpdate");
return View(model);

究其原因,有人在无限的信心决定Html.Hidden将保持“贴”的价值观丢弃修改。即使在C#中的同一页面上创建的。

这个你从ModelState中删除它简单的方法,以便能抓住新的价值,而不是公布。

有些人说的默认行为的权利,但请,我与一体的综合性企业搜索(公司/产品),以及一个隐藏字段,为产品的键(长)一个手工制作的网格工作。更改公司在同一页上公布。

<%= Html.Hidden("detalleProductos[" + i + "].PRO_PRODUCTOEMPRESAID", item.PRO_PRODUCTOEMPRESAID)%>
<%= Html.Hidden("detalleProductos[" + i + "].DET_DETALLEENCUESTAID", item.DET_DETALLEENCUESTAID)%>

我花了很多时间试图弄清楚为什么它的错误的公司(我第一次加载)更新。因为记得第一个和丢弃修改我在同一页上的C#制作。很难赶上。

最后,我不得不这样做:

foreach (var s in ModelState.Keys.ToList())
                if (s.StartsWith("detalleProductos"))
                    ModelState.Remove(s);

我很沮丧,我决定后我的解决办法...

祝好运!


4
投票

如果你不希望使用蜱,TextBoxFor会如果您指定的日期格式和HTML隐藏属性的工作。

@Html.TextBoxFor(model => model.CreatedDate, "{0:dd/MM/yyyy HH:mm:ss.fff}", htmlAttributes: new { @type = "hidden" })

1
投票

您需要使用DateTime.Ticks属性来获取毫秒。

如果您使用的是视图模型,你可以定义存储日期时间蜱的一个属性。例如:

public long LastUpdateTick { get; set; }

当您将实体映射到你的模型和背部,你可以做的DateTime之间的转换和映射代码蜱。

然后,您的视图可以绑定到LastUpdateTick财产。这将允许你仍然使用lambda表达式的结合,如果你想。


1
投票

替代做法:不要使用标记辅助方法,在所有的,只是直接写代码到你的页面模板,并将已经格式化值,包括MS:

<input type="hidden" id="Created" name="Created" value="@Model.Created.ToString("dd/MM/yyyy HH:mm:ss.fff")" />

这将使得输出形式:

<input type="hidden" id="Created" name="Created" value="01/02/2019 13:09:46.927" />
© www.soinside.com 2019 - 2024. All rights reserved.