1

这里的菜鸟问题:

我正在使用 ASP.NET MVC 3,并且正在尝试通过 Backbone 保存实体。这是我所拥有的:

我这样定义了我的主干模型(程序):

var Program = Backbone.Model.extend({

    defaults: function () {
        return { name: "" };
    },

    initialize: function (attrs) {
        this.set('name', attrs.name);
    },

    urlRoot: '/program/add'

});

然后我将模型保存在按钮的单击事件上:

$('.add-program').click(function () {
    var programName = $('.program-name').val();
    var program = new Program({ name: programName });
    program.save(null, {
        success: function (model, response) {
            alert('success');
        },
        error: function (model, response) {
            alert('error');
        } 
    });
});

它适用于 IE(令人惊讶!) - ProgramController.Add(string name) 被调用得很好,我得到了成功响应。但是我在 Chrome 和 FF 上遇到了问题——它们都触发了错误回调,但在 Chrome 上我的控制器操作根本没有受到影响(尽管在 FF 上确实如此)。有趣的是,我的动作断点确实在 FF 上被击中,具有适当的参数值,但仍然得到错误回调。

我不确定这里发生了什么。我尝试通过 Firebug/Chromebug 进行调试,但在错误回调参数上看不到太多(errorStatus 只是......好吧......“错误”!)。我还尝试查看“网络”选项卡和 Fiddler,但没有看到任何响铃的东西(也许我看的地方不对)。我还尝试对控制器进行直接的 jquery ajax 调用,但仍然得到相同的奇怪行为。

以防万一,这是 MVC 操作(尽管我认为问题不在这里):

[HttpPost]
public JsonResult Add(string name)
{
    var stubbedResponse = new {id = Guid.NewGuid()};
    return Json(stubbedResponse);
}

有什么想法可能导致这种情况吗?

4

1 回答 1

1

带有您的客户端代码的小提琴http://jsfiddle.net/Uj5Ae/2似乎没问题。与您的服务器响应有关吗?或者 Backbone 和 Underscore 版本不匹配?
或者,如果事件传播未在其他地方处理,则可能在单击处理程序结束时返回 false。

剧透:那是事件传播:)

于 2012-04-14T12:54:42.473 回答