2013-09-05 24 views
2

如何使用Web API在Knockout JS中發佈數據。在淘汰賽中使用webapi發佈數據js

當我發佈數據時,它會給出錯誤請求錯誤。 。 。

我有以下ViewModel

function StudentViewModel() { 
      var self = this; 
      self.StudentID = ko.observable(""); 
      self.Name = ko.observable(""); 
      self.Age = ko.observable(""); 


      var Student = { 
       StudentID: self.StudentID, 
       Name: self.Name, 
       Age: self.Age 
      }; 

      self.Student = ko.observable(); 
      self.Students = ko.observableArray(); 

      var baseUri = '@ViewBag.ApiUrl'; 
      $.getJSON(baseUri, self.Students); 
      self.create = function() { 
       if (Student.Name() != "" && Student.Age() != "") { 
        $.ajax({ 
         url: baseUri, 
         cache: false, 
         type: 'POST', 
         contentType: 'application/json; charset=utf-8', 
         data: ko.toJSON(Student), 
         success: function (data) { 
          // alert('added'); 
          self.Students.push(data); 
          self.Name(""); 
          self.Age(""); 
         } 
        }).fail(function (xhr, textStatus, err) { 
         alert(err); 
        }); 
       } 
       else { 
        alert('Please Enter All the Values !!'); 
       } 
      }; 

更新:

這裏是控制器動作

public HttpResponseMessage PostStudent(Student student) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Students.Add(student); 
       db.SaveChanges(); 

       HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, student); 
       response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = student.StudentID })); 
       return response; 
      } 
      else 
      { 
       return Request.CreateResponse(HttpStatusCode.BadRequest); 
      } 
     } 
+0

請問你的控制器動作是什麼樣子? – nemesv

+0

@nemesv查看更新 –

+2

看起來您的POST正在到達控制器,但模型數據無效。嘗試(a)查看您的應用正在發送的實際HTTP請求,以及(b)使用Fiddler等測試發送POST請求,並查看是否有任何區別。 –

回答

1

你有一些錯誤,在您的視圖模型。

  1. 在$ .ajax中,您應該將json對象轉換爲字符串,請使用JSON.stringify。
  2. 通過ViewBag傳遞網址這是非常糟糕的主意,將其聲明爲靜態,或者在創建時傳入ViewModel。

所以,你的$就應該是這樣的:

var submitData = ko.toJSON(Student); 
$.ajax({ 
    url: baseUri, 
    cache: false, 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(submitData), 
    success: function (data) { 
     // alert('added'); 
     self.Students.push(data); 
     self.Name(""); 
     self.Age(""); 
    }