title: ViewMode observable properties not included during PUT
body: <ol>
  <li><p>my Knockout.js viewModel has an update method which is bound to an Update button's click event.  When clicked, the firstName and lastName are not included in the ajax data payload. However, if I make these properties non-observable, then they are included in the ajax data playload. Does anyone know why?  </p></li>
  <li><p>The radio buttons values are in the ajax data, but the model binder on the WebAPI PUT method doesn't see the updated value.  Is it because "Yes" and "No" in the json data while the model is looking for "true" or "false" value or "1" or "0". The data type of the <strong>alertOptIn</strong> and <strong>active</strong> properties are Nullable.</p></li>
  <li><p>Upon success, how to refresh the table listing that is bound to the users observable array? I am making a direct call to the self.getByInitial(thisIni) which is defined as another method in the viewModel, but it doesn't work.  getByInitial(thisIni) does work when fired up by a hyperlink DOM element.</p></li>
  </ol>
  
  <p>Thank you for your help.</p>
  
  <pre><code>function viewModel() {
          var baseApiUri = "@Model.apiBaseUrl";
  
          var self = this;
  
          /********** view model **********/
          function userViewModel(user) {
              var self = this;
              self.user_ID = user.user_ID;
              self.firstName = ko.observable(user.firstName);
              self.lastName = ko.observable(user.lastName);
              self.long_name = ko.dependentObservable(function () {
                  return self.firstName() + " " + self.lastName();
              }, self);
              self.Password = user.Password; //not used but required
              self.Login = user.Login;
              self.dateAdded = user.dateAdded;
              self.email = user.email;
              self.alertOptIn = user.alertOptIn ? "Yes" : "No";
              self.active = user.active ? "Yes" : "No";
          }
  
          /********** properties **********/
          self.newUser = ko.observable();
          self.userBeforeEdit = ko.observable();
          self.users = ko.observableArray();
          self.user = ko.observable();
          self.operationStatus = ko.observable();
  
          self.update = function () {
              self.operationStatus("Requesting " + baseApiUri + "/api/user/" + self.user().user_ID + " ...");
              var thisIni = self.user().lastName._latestValue.charAt(0);
              //alert(thisIni);
              $.ajax({
                  url: baseApiUri + "/api/user/" + self.user().user_ID,
                  cache: false,
                  type: 'PUT',
                  contentType: 'application/json; charset=utf-8',
                  data: JSON.stringify(self.user()),
                  success: function () {
                      self.getByInitial(thisIni);
                      self.operationStatus("done");
                  }
              })
              .fail(function (xhr, textStatus, err) {
                  self.operationStatus(err);
  
              });
          }
  </code></pre>
  
  <p>cshtml:</p>
  
  <pre><code>&lt;div id="detailTab"&gt;
      &lt;div data-bind="if: user()"&gt;
          &lt;input type="hidden" data-bind="text: user().Password"/&gt;
          &lt;div&gt;
              &lt;label for="firstName"&gt;First Name&lt;/label&gt;
              &lt;input data-bind="value: user().firstName" type="text" title="First Name" /&gt;
          &lt;/div&gt;
  
          &lt;div&gt;
              &lt;label for="lastName"&gt;Last Name&lt;/label&gt;
              &lt;input data-bind="value: user().lastName" type="text" title="Last Name" /&gt;
          &lt;/div&gt;
  
          &lt;div&gt;
              &lt;label for="fullName"&gt;Full Name&lt;/label&gt;
              &lt;input data-bind="value: user().long_name" type="text" title="Full Name" disabled="disabled" /&gt;
          &lt;/div&gt;
  
          &lt;div&gt;
              &lt;label for="login"&gt;Login&lt;/label&gt;
              &lt;input data-bind="value: user().Login" type="text" title="Login" /&gt;
          &lt;/div&gt;
  
          &lt;div&gt;
              &lt;label for="dateAdded"&gt;Date Added&lt;/label&gt;
              &lt;input data-bind="value: user().dateAdded" type="text" title="Date Added" /&gt;
          &lt;/div&gt;
  
          &lt;div&gt;
              &lt;label for="email"&gt;Email&lt;/label&gt;
              &lt;input data-bind="value: user().email" type="text" title="Email" /&gt;
          &lt;/div&gt;
  
          &lt;div&gt;
              &lt;label for="emailAlert"&gt;Email Alert&lt;/label&gt;
              &lt;span&gt;&lt;input data-bind="checked: user().alertOptIn" type="radio" title="Send Email Alert" value="Yes" name="alertOptIn"/&gt;Yes&lt;/span&gt;
              &lt;span&gt;&lt;input data-bind="checked: user().alertOptIn" type="radio" title="No Email Alert" value="No" name="alertOptIn"/&gt;No&lt;/span&gt;
          &lt;/div&gt;
  
          &lt;div&gt;
              &lt;label for="accountStatus"&gt;Account Status&lt;/label&gt;
              &lt;span&gt;&lt;input data-bind="checked: user().active" type="radio" title="Active" value="Yes" name="active" /&gt;Active&lt;/span&gt;
              &lt;span&gt;&lt;input data-bind="checked: user().active" type="radio" title="Inactive" value="No" name="active"/&gt;Inactive&lt;/span&gt;
          &lt;/div&gt;                
          &lt;input type="button" value="Update" data-bind="click: update" /&gt;
          &lt;input type="button" value="Cancel" data-bind="click: cancelEdit" /&gt;
          &lt;p data-bind="text:operationStatus" class="status"&gt;&lt;/p&gt;
      &lt;/div&gt;
  &lt;/div&gt;
  </code></pre>
  
  <p>Ajax Request:</p>
  
  <pre><code>    PUT http://localhost/AppBL/api/user/129 HTTP/1.1
      Accept: */*
      Content-Type: application/json; charset=utf-8
      X-Requested-With: XMLHttpRequest
      Referer: http://localhost/AppUL/Home/UserList
      Accept-Language: en-us
      Accept-Encoding: gzip, deflate
      User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
      Host: localhost
      Content-Length: 220
      Connection: Keep-Alive
      Pragma: no-cache
  
  {"user_ID":129,"Password":"omitted","Login":"myLogin","dateAdded":"2013-08-26T14:09:59","email":"myEmail@mycompany.com",alertOptIn":"Yes","active":"Yes"}
  </code></pre>