1

ここでNoobの質問:

ASP.NET MVC 3を使用していて、バックボーンを介してエンティティを保存しようとしています。これが私が持っているものです:

バックボーンモデル(プログラム)を次のように定義しました。

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は問題ないようです。サーバーの応答に何かありますか?または、バックボーンとアンダースコアのバージョンが一致していませんか?
または、イベントの伝播が他の場所で処理されていない場合は、クリックハンドラの最後でfalseが返される可能性があります。

ネタバレ:それはイベントの伝播でした:)

于 2012-04-14T12:54:42.473 に答える