http://stackoverflow.com/questions/43414348/knockout-binding-mvc-not-working

by jlspake

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.1/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.js"></script>
<div>
  <input type="button" data-bind="click: addCurrency" value="ADD" />
  <div class="panel panel-default" data-bind="visible: isAddVisible" style="display:none">
    <div class="panel-heading">Add New Currency</div>
    <div class="panel-body">
        <div class="row">
            <div class="col-md-3">
                @Html.LabelFor(model => model.IFSCode)
                <input type="text" data-bind="value: $root.IFSCode, valueUpdate: 'keypress'" class="form-control " />
            </div>
            <div class="col-md-3">
                @Html.LabelFor(model => model.PayPalCode)
                <input type="text" data-bind="value: $root.PayPalCode, valueUpdate: 'keypress'" class="form-control " />
            </div>
            <div class="col-md-3">
                @Html.LabelFor(model => model.Symbol)
                <input type="text" data-bind="value: $root.Symbol, valueUpdate: 'keypress'" class="form-control " />
            </div>
        </div>
        <div class="row">
            <div class="col-md-9">
                @Html.LabelFor(model => model.Description)
                <input type="text" data-bind="value: $root.Description" class="form-control" />
            </div>
        </div>
        <br />
        <div class="row">
            <div class="col-md-3">
                <input data-bind="click: $root.createCurrency" type="button" class="btn btn-success btn-sm" value='@DbRes.T("Save", "Common")' />
                <input data-bind="click: cancelAdd" type="button" class="btn btn-warning btn-sm" value='@DbRes.T("Cancel", "Common")' />
       ...

JavaScript

var urlPath = window.location.pathname;

var currencyVm = function() {
  var self = this;

  var validationOptions = {
    insertMessages: true,
    decorateElement: true,
    errorElementClass: 'errorFill'
  };
  ko.validation.init(validationOptions);

  //ViewModel
  self.ID = ko.observable(0);
  self.Id_Region = ko.observable("");
  self.Description = ko.observable("");
  self.Symbol = ko.observable("");
  self.PayPalCode = ko.observable("");
  self.IFSCode = ko.observable("");


  self.isGridVisible = ko.observable(true);
  self.isEditVisible = ko.observable(false);
  self.isAddVisible = ko.observable(false);


  //Objects ---------------------------------------------
  self.Currency = ko.observable();
  self.Currencys = ko.observableArray([]);

  //Methods ---------------------------------------------

  //Edit
  self.editCurrency = function(dataItem) {

    self.isGridVisible(false);
    self.isEditVisible(true);

    self.ID = ko.observable(dataItem.ID);
    self.Id_Region = ko.observable(dataItem.Id_Region);
    self.Description = ko.observable(dataItem.Description);
    self.Symbol = ko.observable(dataItem.Symbol);
    self.PayPalCode = ko.observable(dataItem.PayPalCode);
    self.IFSCode = ko.observable(dataItem.IFSCode);

    //var vm = ko.mapping.fromJS(dataItem);
    //self.Currency(vm);
  };

  //Add
  self.addCurrency = function() {
    self.isGridVisible(false);
    self.isAddVisible(true);
    self.isEditVisible(false);
    self.reset();
  }

  // Cancel Edit
  self.cancelEdit = function() {
    self.isEditVisible(false);
    self.isGridVisible(true);
  }

  // Cancel Add
  self.cancelAdd = function() {
    self.isAddVisible(false);
    self.isGridVisible(true);
  }

  //Reset 
  self.reset = function() {
    self.ID(0);
    self.Id_Region("");
    self.Description("");
    self.Symbol("");
    self.PayPalCode("");
    self.IFSCode("");
  }

  //Actions --------------------------------------------------

  var Currency = {
    ID: self.ID,
   ...