2013-09-04 3 views
0

다음은 Knockout.js 및 MVC WebApi를 사용하는 단일 페이지 응용 프로그램입니다. WebApi 서비스에서 데이터를 가져 오는 데 문제가 없습니다. 그러나 PUT도 POST도 서버에 할 수 없습니다. self.update()에 바인딩 된 Update 버튼을 클릭하면 항상 "baseApiUri/api/user/undefined"라고 표시됩니다. self.user (new userViewModel (user)) 줄이 현재 사용자 레코드의 범위를 설정한다고 생각했지만 실제로 그렇지는 않습니다. 하드 코드 대신 userViewModel을 사용하여 사용자 관찰 가능 객체의 각 속성을 가져오고 설정하려고합니다. 도와 줘서 고마워.Knockout.js가 서버 데이터베이스를 업데이트 할 수 없습니다

url: baseApiUri + "/api/user/" + self.user().user_ID 

답변

1

@model App4MVC4.Controllers.UserViewModel 

@section scripts{ 
    <script type="text/javascript"> 
     function viewModel() { 
      var baseApiUri = "@Model.apiBaseUrl"; 

      var self = this; 

      /********** nested view model **********/ 
      function userViewModel(user) { 
       var self = this; 
       self.user_ID = user.user_ID; 
       self.firstName = user.firstName; 
       self.lastName = user.lastName; 
       self.long_name = ko.computed(function(){return self.firstName + " " + self.lastName}); 
       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(); 


      /********** methods **********/ 

      // create new user (HttpPost) 
      self.create = function (formElement) { 
       self.operationStatus("Creating ..."); 
       $(formElement).validate(); 
       if ($(formElement).valid()) { 
        $.post(baseApiUri + "/api/user", $(formElement).serialize(), null, "json") 
        .done(function (o) { 
         self.users.push(o); 
        }) 
        .fail(function (xhr, textStatus, err) { 
         self.operationStatus(err); 
        }); 
       } 
      } 

      self.cancelAdd = function() { 
       self.newUser(new userViewModel()); 
      } 
     } 

     // instantiate the above ViewModel and apply Knockout binding 
     ko.applyBindings(new viewModel()); 

     // make jQuery tabs 
     $("#tabs").tabs(); 
    </script> 
} 

당신은 괄호를 놓쳤다. 그 덕분에 나에게 많은 머리카락이 생겼다. ;-)
+0

감사합니다 : 여기에 사용자에 대한 값을 검색 할 때

<div id="tabs"> <ul> <li><a href="#detailTab" id="detailTabHandle">User Detail</a></li> <li><a href="#addNewTab" id="addNewTabHandle ">New User</a></li> </ul> <div id="addNewTab"> <form> <div> <label for="firstNameNew">First Name</label> <input type="text" title="First Name" data-bind="value:newUser.firstName"/> </div> <div> <label for="lastNameNew">Last Name</label> <input type="text" title="Last Name" data-bind="value: newUser.lastName"/> </div> <div> <label for="fullNameNew">Full Name</label> <input type="text" title="Full Name" data-bind="value: newUser.long_Name"/> </div> <div> <label for="loginNew">Login</label> <input type="text" title="Login" data-bind="value: newUser.Login"/> </div> <div> <label for="emailNew">Email</label> <input type="text" title="Email" data-bind="value: newUser.email"/> </div> <div> <label for="emailAlertNew">Email Alert</label> <span><input data-bind="checked: newUser.alertOptIn" type="radio" title="Send Email Alert" value="Yes" name="alertOptIn"/>Yes</span> <span><input data-bind="checked: newUser.alertOptIn" type="radio" title="No Email Alert" value="No" name="alertOptIn"/>No</span> </div> <div> <input type="button" value="Save" data-bind="click: create" /> <input type="button" value="Cancel" data-bind="click: cancelAdd" /> <p data-bind="text: operationStatus" class="status"></p> </div> </form> </div> </div> 

user266909

+0

self.create (formElement) 메소드가 작동하지 않는 이유를 알고 계십니까? Ajax 요청 본문은 항상 비어있다. – user266909

+0

당신의 self.create 메소드는 '폼'요소가 아닌 '저장'버튼 요소를 전달합니다. – Rustam

관련 문제