【发布时间】:2015-05-21 19:28:52
【问题描述】:
我有一个 MVC 5 项目,其中有一个大表单,使用以下方法将其序列化为 Knockout:
var vm = ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)));
一些表单字段是使用 jQuery-ui-datepicker 的文本框,用户可以在其中选择日期:
@Html.TextBoxFor(m => m.ModelDate, "{0:d}", new { @class = "form-control", @data_bind = "value: ModelDate" })
我的问题是,如果 ViewModel 的可空 ModelDate 属性包含 DateTime 值,则文本框会显示类似 2014-04-05T18:00:00 的内容,但不会显示 04/5/2015。格式(例如"{0:d}")被忽略。
我不知道我的字符串格式参数被忽略了,当 ViewModel 中的 C# 可为空的 DateTime 映射到 KnockoutJS 时,我对幕后发生的事情感到困惑。这类问题有典型的 MVC 或 Knockout 解决方案吗?
【问题讨论】:
-
您是否尝试过 m.ModelDate.ToShortDateString() 或者它可能必须是“0:dd”而不是单个 d
-
@SythnetP 我没有尝试过,这是一个非常好的主意,但我的大多数日期都是 Nullable
s,它们没有 ToShortDateString() 属性。 -
我建议的唯一其他选择是检查它是否不为空,然后将其转换为 DateTime 或将其转换为 DateTime
-
@SythnetP 实际上,即使尝试 ToString() 也会导致错误:“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。” .
-
可能与覆盖它的数据绑定有关吗?注意到 @data_bind = "value: ModelDate" } 可能会显示您要显示的值?
标签: c# razor knockout.js asp.net-mvc-5 jquery-ui-datepicker