私は単純なオブジェクト モデル public class License {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string CreationUserId { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string LastModifiedUserId { get; set; }
public string LicenseName { get; set; }
public LicenseType LicenseType { get; set; }
public State State { get; set; }
public DateTime DateIssued { get; set; }
public int ValidFor { get; set; }
}
public class State
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string CreationUserId { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string LastModifiedUserId { get; set; }
[StringLength(2)]
[Required]
public string Name { get; set; }
[Display(Name = "Long Name")]
[Required, StringLength(25)]
public string LongName { get; set; }
}
public class LicenseType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string CreationUserId { get; set; }
[ScaffoldColumn(false), StringLength(20)]
public string LastModifiedUserId { get; set; }
[StringLength(100), Required]
public string Description { get; set; }
}
ホットタオルのテンプレートはbreeze、durandal、knockoutを使用しています。私は単純な追加ビューモデルを持っています
var _licenseAdded = false;
var vm = {
states: ko.observableArray(context.states),
licenseTypes: ko.observableArray(context.licenseTypes),
viewAttached: function () {
var self = this;
$('input[name^="date"]').datepicker();
$('#validFor').spinner({
min: 365,
max: 3650,
step: 30
});
log('add Attached', null, true);
},
activate: function () {
var self = this;
self.original = context.manager.createEntity('License', { licenseName: 'Testing321', dateIssued: moment().format('L') }, null);
log('add Activated', null, true);
},
canDeactivate: function () {
if (_licenseAdded === false) {
return app.showMessage('Are you sure you want to leave this page?', 'Navigate', ['Yes', 'No']);
} else {
return true;
}
},
saveChanges: function () {
$.when(context.saveNewLicense()).done(function () {
_licenseAdded = true;
});
router.navigateTo('home');
},
original: undefined
};
return vm;
そして、これが私のadd.htmlです。すべてが正常にバインドされ、保存するまで美しく機能します。
saveChanges を呼び出すと、コントローラに送信された saveBundle には、正しい State と LicenseType を保存できるようにするナビゲーション プロパティが添付されていません。 , "LastModifiedUserId": null, "LicenseName": "テスト用の新規", "DateIssued": "2013-03-11T04:00:00Z", "ValidFor": 0, "entityAspect": { "entityTypeName": "ライセンス:#Volt.Telecom.Licensing.Models", "entityState": "追加", "originalValuesMap": {}, "autoGeneratedKey": { "propertyName": "Id", "autoGeneratedKeyType": "Identity" } } ], "saveOptions": { "allowConcurrentSaves": false } }
これ以上のバニラを手に入れることができるとは思わない. なぜこのようなことが起こるのでしょうか? クライアントでデバッグしているとき、状態と licenseType のナビゲーション プロパティはすべて正しく、正しい値になっています。