0

控制器代码:

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. 日期数据也没有正确绑定。

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

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

4

1 回答 1

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

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

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

于 2012-09-18T00:00:18.737 回答