2013-08-02 8 views
2

У меня есть сайт 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 

Кто-нибудь есть какие-либо идеи, что является причиной этого?

+3

Нокаут-MVC в настоящее время имеет ошибку, так что вложенные свойства (например 'x.Voucher.VoucherNumber') правильно не wroking увидеть это дубликат? вопрос об обходном пути: http://stackoverflow.com/questions/17918628/bind-data-with-nested-object-using-knockout-mvc-in-mvc-4 – nemesv

+0

Спасибо, это довольно плохая ошибка! Ваша ссылка заставила меня немного почитать и найти это http://stackoverflow.com/questions/11618042/is-there-a-reason-i-would-use-knockout-mvc-instead-of-knockout- js - не уверен, что буду использовать его сейчас! – Neil

+1

Я не вижу нокаута-mvc, что плохо, как Tyrsius в связанном вопросе, у него есть некоторые проблемы и ограничения, но сравнение его с webforms слишком сильное. Если вы знаете нокаут и в любом случае используете ASP.NET MVC, и вам нравится иметь строгие типизированные представления и выражения для привязки к kncockout, и вы знаете, что делаете, это не так уж плохо. – nemesv

ответ

0

Я думаю, это должно работать.

<select @ko.Bind.Options(x=>x.Countries).OptionsText("'Name'").OptionsValue("'CountryId'").Value(x=>x.Voucher.CountryId) ></select> 

 Смежные вопросы

  • Нет связанных вопросов^_^