gpt4 book ai didi

javascript - 使用默认的 JavaScriptSerializer 将 DateTime 绑定(bind)到挖空 View 模型

转载 作者:可可西里 更新时间:2023-11-01 02:03:36 25 4
gpt4 key购买 nike

我刚开始使用 knockout我在使用 JavaScriptSerializer 进行日期时间序列化和反序列化时遇到了麻烦。

我更新了 Steves 中的礼物模型 koListEditor他的博客中的示例包含一个 Modified DateTime 字段:

public class GiftModel
{
public string Title { get; set; }
public double Price { get; set; }
public DateTime Modified { get; set; }
}

然后我更新了 Index.aspx 以包含新字段:

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
<h1>Gift list editor</h1>

<p>You have asked for <span data-bind="text: gifts().length">&nbsp;</span> gift(s)</p>

<form class="giftListEditor">
<table>
<tbody data-bind="template: { name: 'giftRowTemplate', foreach: gifts }"></tbody>
</table>

<button data-bind="click: addGift">Add Gift</button>
<button data-bind="enable: gifts().length > 0" type="submit">Submit</button>
</form>

<script type="text/html" id="giftRowTemplate">
<tr>
<td>Gift name: <input class="required" data-bind="value: Title, uniqueName: true"/></td>
<td>Price: \$ <input class="required number" data-bind="value: Price, uniqueName: true"/></td>
<td>Modified: <input class="required date" data-bind="value: Modified, uniqueName: true"/></td>
<td><a href="#" data-bind="click: function() { viewModel.removeGift($data) }">Delete</a></td>
</tr>
</script>

<script type="text/javascript">
var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>;
var viewModel = {
gifts : ko.observableArray(initialData),

addGift: function () {
this.gifts.push({ Title: "", Price: "", Modified:"" });
},

removeGift: function (gift) {
this.gifts.remove(gift);
},

save: function() {
ko.utils.postJson(location.href, { gifts: this.gifts });
}
};

ko.applyBindings(document.body, viewModel);
$("form").validate({ submitHandler: function() { viewModel.save() } });
</script> </asp:Content>

但是当 JavaScriptSerializer 序列化模型时

var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>;

修改日期是这样出来的:

DateTime problem

同样在使用英国日期时,即25/01/2011 JavaScriptSerializer.Deserialize 抛出以下异常:

25/01/2011 is not a valid value for DateTime.

虽然我在这里有 2 个问题,但主要问题是有没有人成功使用过 knockout来自 MVC 2 并让 JavaScriptSerializer 与 DateTimes 一起工作?我意识到我可以编写自己的 JavaScriptSerializer,但我希望那里有现成的解决方案 :)

下面是 Steve Sanderson 的 koListEditor 更新版本的代码:

Code on my skydrive

谢谢

戴夫

最佳答案

嗯,有两个选择。您可以通过使用指定的 View 模型对象来完成简单的修复,该对象将预格式化的日期时间值存储为字符串。这通常是我所做的。然后我可以尝试解析日期值以进行验证。

另一种选择是实现自定义数据绑定(bind)。你可以看看这样做here .这将是更优雅的方法。这个方法的好处是,您可以在绑定(bind)时创建 UI 生成代码,允许您在此过程中将日期选择器添加到 UI。

关于javascript - 使用默认的 JavaScriptSerializer 将 DateTime 绑定(bind)到挖空 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com