У меня есть сайт ASP.NET MVC, и я пытаюсь работать с ним нокаутом-mvc.knockoutmvc - не удалось разобрать привязки
Я создал Модельный в C# код называется Refund
, который содержит среди прочего типа Voucher
называется Voucher
и List<Country>
называется Countries
. Ваучер имеет переменную типа int
под названием VoucherNumber
пропускает этот вид Модели в сильно определенной точке зрения Refund\Index
Я пытаюсь получить нокаут-MVC, чтобы связать значения в Refund.Voucher.VoucherNumber в текстовое поле, и значения в Refund.Countries
в раскрывающемся списке. На контроллере я жестко закодировал значения Voucher.Vouchernumber и добавил две страны в список стран.
Вот мой View Code:
@using Resources
@using PerpetuumSoft.Knockout
@model MVC.Models.RefundViewModel
@{
var ko = Html.CreateKnockoutContext();
}
<div id="refundformcontainer">
<div id="headersection">
<div id="pagetitlecontainer">@Language.RefundVouchers</div>
<div id="helpercontainer">
<label id="lblhelper">To begin enter a voucher number or scan a barcode</label>
</div>
</div>
<div id="vouchercontainer">
<div id="voucherdetailscontainer">
<h5>@Language.VoucherDetails</h5>
<div id="vouchernumbercontainer" class="initialvoucherfield">
@Html.LabelFor(x=>x.Voucher.VoucherNumber)
@ko.Html.TextBox(x=>x.Voucher.VoucherNumber)
</div>
<div id="countrycontainer" class="initialvoucherfield">
@Html.LabelFor(x=>x.Voucher.Country)
<select ko.Bind.Options(x=>x.Countries).OptionsText("Name").OptionsValue("CountryId").Value(x=>x.Voucher.CountryId) ></select>
</div>
</div>
</div>
</div>
@ko.Apply(Model);
При загрузке страницы, ни управления обязаны.
Когда я смотрю на сгенерированный источник следующий код генерируется
<script type="text/javascript">
var viewModelJs = {"Refund":null,"Voucher":{"VoucherId":0,"VoucherNumber":123456789,"Country":null,"CountryId":0,"Retailer":null,"RetailerId":0,"PurchaseDate":"0001-01-01T00:00:00","CustomsStampDate":null,"InvoiceNumber":"","LineItems":[],"TotalPurchasePrice":0.0},"Countries":[{"CountryId":380,"Name":"Italy"},{"CountryId":724,"Name":"Spain"}]};
var viewModel = ko.mapping.fromJS(viewModelJs);
ko.applyBindings(viewModel);
</script>
Нокаут-2.2.0.js и knockout.mapping-latest.js оба включены в страницу
Погрешность Я получаю это
0x800a139e - JavaScript runtine error: Unable to parse bindings
Message: [Object Error]
Bindings value: Voucher().VoucherNumber
затем я изменил Refund View модель, чтобы она имела свойство VoucherNumber и имел ссылку текстовое поле этого вместо свойства Voucher.VoucherNumber
@ko.Html.TextBox(x=>x.VoucherNumber)
Когда я побежал это я получил те же смог разобрать привязки ошибки, но на этот раз для страны
Bindings value: options : Countries, optonsText : Name, optionsValue : CountryId
Кто-нибудь есть какие-либо идеи, что является причиной этого?
Нокаут-MVC в настоящее время имеет ошибку, так что вложенные свойства (например 'x.Voucher.VoucherNumber') правильно не wroking увидеть это дубликат? вопрос об обходном пути: http://stackoverflow.com/questions/17918628/bind-data-with-nested-object-using-knockout-mvc-in-mvc-4 – nemesv
Спасибо, это довольно плохая ошибка! Ваша ссылка заставила меня немного почитать и найти это http://stackoverflow.com/questions/11618042/is-there-a-reason-i-would-use-knockout-mvc-instead-of-knockout- js - не уверен, что буду использовать его сейчас! – Neil
Я не вижу нокаута-mvc, что плохо, как Tyrsius в связанном вопросе, у него есть некоторые проблемы и ограничения, но сравнение его с webforms слишком сильное. Если вы знаете нокаут и в любом случае используете ASP.NET MVC, и вам нравится иметь строгие типизированные представления и выражения для привязки к kncockout, и вы знаете, что делаете, это не так уж плохо. – nemesv