Breeze SaveChanges

时间:2013-09-11 01:22:47

标签: asp.net-mvc breeze savechanges

我是BreezeJS的新手,最近创建了一个启动并运行的项目。我可以使用Breeze从我的SQL服务器查询数据没有问题。但是,每当我尝试保存更改时,更改都不会保存。我已经在VS 2012中验证了实际调用了JavaScript save函数,但是从不调用服务器端的HttpPost方法。

这是我设置的Breeze Controller:

    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>

保存更改

先谢谢你的帮助!!

编辑2013年9月12日: 我已经修好了,感谢周杰伦的帮助!!

问题是我绑定了文本而不是值。我将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>

现在可以毫无问题地保存。谢谢周杰伦的帮助!

1 个答案:

答案 0 :(得分:0)

您是否确认您实际上正在客户端上的EntityManager中更改/或添加实体?您可以调用EntityManager的 hasChanges 方法进行确认。如果没有保存更改,Breeze不会尝试调用服务器。

所以尝试像

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

我的猜测是你有一个绑定问题或者没有查询或创建一个需要保存的实体。