【问题标题】:MVC 4 model Binding in KnockoutJSKnockoutJS 中的 MVC 4 模型绑定
【发布时间】:2012-09-18 08:00:18
【问题描述】:

控制器代码:

public ActionResult Index()
{
PersonRepository repo = new PersonRepository();
PersonListModel lstPersons = new PersonListModel();
lstPersons.Persons = repo.GetAllPerson();
return View(lstPersons);
}

实际的 Javascript 代码:

<script type="text/javascript"> 

var personListData = @Html.Raw(Json.Encode(Model.Persons));

var viewModel = {
personsModel : ko.observableArray(personListData)

}

ko.applyBindings(viewModel)

<script/> 

调试时的结果:

 var personListData = [
  {"PersonId":324783035204000026,"FirstName":"Gibbbs","BirthDate":"\/Date(1347647400000)\/"},{"PersonId":324126155204000001,"FirstName":"Russel","BirthDate":"\/Date(1347561000000)\/"}];

*问题:

  1. 当模型数据被绑定时,它会显示我的人 id 为:324783035204000026,但是当绑定过程完成时,它会将 PersonId 更改为:324783035204000000 和 324126155204000001 到 324126155204000000

  2. 日期数据也没有正确绑定。

那么背后的主要原因是什么?

如果您对此有任何想法,请帮助我。

【问题讨论】:

    标签: knockout.js


    【解决方案1】:
    1. 数字 324783035204000026 太大而无法用 JavaScript 准确表示,因此最后两位数字被丢弃。您可以通过将 PersonListModel 类中的 PersonId 属性设置为字符串,而不是十进制或当前的任何值来解决此问题。

      如果您无法修改 PersonListModel 类,无论出于何种原因,您都应该创建一个名为 PersonListModelClient 之类的新类,该类具有您的 JavaScript 代码所需的属性子集,然后从每个PersonListModel 转换为PersonListModelClient 的新实例,然后将它们编码为JSON。

    2. 这是因为日期在 JSON 中没有标准表示,因此 Microsoft 发明了一种格式,类似于 "\/Date(1347647400000)\/",其中日期被编码为字符串。您有两个选择:如果您只想向用户显示日期,您可以使用与以前相同的方法,将BirthDate 属性更改为字符串,并使用DateTime.ToString 在服务器端进行格式化方法。或者,您可以use the answer to this question,它展示了如何将特殊格式的字符串转换为常规的 JavaScript Date 对象。

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多