0

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

这是我设置的微风控制器:

    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>

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

4

1 回答 1

0

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

所以尝试类似的东西

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

我的猜测是您要么有绑定问题,要么没有查询或创建需要保存的实体。

于 2013-09-12T00:47:35.263 回答