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 で正確に表現できないため、最後の 2 桁が削除されています。これを修正するPersonIdには、クラスのプロパティをPersonListModel10 進数ではなく文字列にするか、現在のものは何でもかまいません。

    何らかの理由でクラスを変更できない場合は、JavaScript コードに必要なプロパティのサブセットを持つ のPersonListModelような名前の新しいクラスを作成し、それぞれのデータを の新しいインスタンスにコピーしてから、エンコードする必要があります。代わりに JSON として。PersonListModelClientPersonListModelPersonListModelClient

  2. これは、JSON では日付の標準的な表現がないためです。Microsoft は"\/Date(1347647400000)\/"、日付が文字列にエンコードされる のような形式を発明しました。2 つのオプションがあります。ユーザーに日付を表​​示するだけの場合は、以前と同じアプローチを使用して、プロパティを文字列に変更し、メソッドBirthDateを使用してサーバー側で書式設定を行うことができます。または、この質問への回答を使用するDateTime.ToStringこともできます。これは、特別にフォーマットされた文字列を通常の JavaScript Date オブジェクトに変換する方法を示しています。

于 2012-09-18T00:00:18.737 に答える