【问题标题】:Breeze SaveChanges微风保存更改
【发布时间】:2013-09-14 21:24:40
【问题描述】:

我是 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>

现在保存没有问题。感谢杰的帮助!

【问题讨论】:

    标签: asp.net-mvc breeze savechanges


    【解决方案1】:

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

    所以试试类似的东西

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

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

    【讨论】:

    • Jay,谢谢,我现在知道问题所在了,我只需要找出问题的根源。我检查了 hasChanges(),你知道它是假的吗(我很确定我已经检查过了。)然后我添加了文本框,这些文本框的数据绑定到我输入的相同 observables。当我对输入进行更改时,文本框的值不会改变。我现在将检查为什么会出现此绑定错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多