我没有使用knockout.js的经验。我继承了一个混合使用knockout和C# ASP.NET的预订表单。我们最近将数据库升级到了最新版本的MySQL,它在日期输入格式方面比旧版本更有讲究。在大多数情况下,我可以通过调整C#或SQL来解决这个问题。但是在表单的某个部分我还没有找到解决方案。日期是以dd/mm/yyyy格式预先填充在表单输入中的。我想将其更改为yyyy-mm-dd,以便可以使用日期输入而不是文本输入
有两个表单输入,如下所示
<input type="text" size="10" maxlength="10" class="normaltext" data-bind="attr:{id:'returnDate-'+Id},value:FlightInfo.ReturnDate, enable:$root.FlightsAdvanced() == 'true' && !FlightInfo.OwnFlight()">
显然,另一个是离开日期,它们似乎是由下面的函数在一个javascript文件中填充的。
function FlightInfo(depDate, retDate) {
this.OwnFlight = ko.observable(false);
this.FirstCode = ko.observable("");
this.SecondCode = ko.observable("");
this.DepartureDate = ko.observable(depDate);
this.ReturnDate = ko.observable(retDate);
this.ReqTransferIn = ko.observable(0);
this.ReqTransferOut = ko.observable(0);
}
如果我用一个硬编码的日期替换ko.observable(retDate)
,例如2020-09-09,并提交表单,那么它就可以工作,但是如果我直接将相同的日期硬编码到文本输入中来代替value:FlightInfo.ReturnDate
,那么它就不能工作-表单从敲除中获得错误格式的日期,并抛出一个错误。
我已经尝试使用this question中建议的moment.js,但它对我不起作用。如何将depDate
和retDate
重新格式化为yyyy-mm-dd
2条答案
按热度按时间jjhzyzn01#
我最终在C#层通过将
.ToShortDateString()
的几个示例更改为.ToString("yyyy-MM-dd")
解决了这个问题。ie3xauqp2#
使用moment.js是实现这一点的正确方法,在创建flightInfo时,应如下修改两个可观察性:
如果这些更改没有反映在您的文本输入中,那么如果您以正确的方式包含并激活了moment.js,您应该进行调试。