2013-09-11 56 views
0

我是BreezeJS的新手,並且最近創建了一個已啓動並正在運行的項目。我可以使用Breeze從我的SQL服務器查詢數據,而不會出現問題。但是,每當我嘗試保存更改時,更改都不會保存。我已經在VS 2012中驗證過JavaScript保存函數實際上是被調用的,但是服務器端的HttpPost方法永遠不會被調用。Breeze SaveChanges

這裏是我已經設置了微風控制器:

using System.Linq; 
using System.Web.Http; 
using Newtonsoft.Json.Linq; 
using Breeze.WebApi; 
using FitnessTracker.Models; 

namespace FitnessTracker.Controllers 
{ 
    [BreezeController] 
    public class BreezeController : ApiController 
    { 
     private readonly EFContextProvider<FitnessTrackerContext> _fitnessContext = 
      new EFContextProvider<FitnessTrackerContext>(); 
     // 
     // GET: /Breeze/ 

     [HttpGet] 
     public string Metadata() 
     { 
      return _fitnessContext.Metadata(); 
     } 

     [HttpPost] 
     public SaveResult SaveChanges(JObject saveBundle) 
     { 
      return _fitnessContext.SaveChanges(saveBundle); 
     } 

     [HttpGet] 
     public IQueryable<FitnessEquipment> FitnessEquipments() 
     { 
      return _fitnessContext.Context.FitnessEquipments; 
     } 

    } 
} 

這裏是保存功能,我使用:

function saveChanges() { 
     return manager.saveChanges() 
      .fail(saveFailed); 
} 

下面是HTML:

<div class="box-body form" data-bind="foreach: exercises"> 
    <input type="text" class="txt-m g2" data-bind="text: EquipmentName" /> 
    <input type="text" class="txt-m g1" data-bind="text: EquipmentLevel" /> 
    <input type="text" class="txt-m g2" data-bind="text: DurationSeconds" /> 
    <input type="text" class="txt-m g2" data-bind="text: Weight" /> 
    <input type="text" class="txt-m g4" data-bind="text: DateTime" /> 
    <br class="clear" /> 
</div> 

保存更改

在此先感謝您的幫助!

編輯9/12/2013: 我已經修復它謝謝傑伊的幫助!

問題是我綁定的是文本而不是值。我將html更改爲:

<div class="box-body form" data-bind="foreach: exercises"> 
    <input type="text" class="txt-m g2" data-bind="value: EquipmentName" /> 
    <input type="text" class="txt-m g1" data-bind="value: EquipmentLevel" /> 
    <input type="text" class="txt-m g2" data-bind="value: DurationSeconds" /> 
    <input type="text" class="txt-m g2" data-bind="value: Weight" /> 
    <input type="text" class="txt-m g4" data-bind="value: DateTime" />   
    <br class="clear" /> 
</div> 

它現在保存沒有問題。感謝杰倫的幫助!

回答

0

您是否確認實際上正在更改/或在客戶端的EntityManager中添加實體?您可以撥打EntityManager的hasChanges方法進行確認。如果沒有保存更改,Breeze不會嘗試調用服務器。

所以嘗試像

if (manager.hasChanges()) { 
    manager.saveChanges() 
      .fail(saveFailed); 
} else { 
    // my guess is that you will get here. 
} 

我的猜測是,你要麼有約束力的問題,或者沒有查詢或創建一個需要拯救的實體。

+0

周杰倫,謝謝,我現在知道問題是什麼,我只需要找出問題的根源是什麼。 我檢查了hasChanges(),你知道它是假的(我非常肯定我已經檢查過了)。然後我添加了文本框,這些文本框被綁定到我的輸入的相同觀察值。當我對輸入進行更改時,文本框的值不會更改。我現在將檢查看看爲什麼我有這個綁定錯誤。謝謝。 –

+0

感謝您回覆。我很高興你解決了它。 –