2

私はasp.net mvc4を使用していて、viewbag.priceへのアクセスで問題に直面しています。

これは私がやっていることです:-

 [HttpPost]
    public ActionResult FillModel(int id)
    {
        var vehModel = db.Vehicle_Model.Where(vehMod => vehMod.MakeID == id).ToList().Select(vehMod => new SelectListItem() { Text = vehMod.Model, Value = vehMod.pkfModelID.ToString() });

        ViewBag.Price = 100;
        return Json(vehModel, JsonRequestBehavior.AllowGet);
    }

私は以下を使用して上記を呼び出しています:-

  $.ajax({
            url: '@Url.Action("FillModel","Waranty")',
            type: 'post',
            data: { id: id },
            dataType: 'json',
            success: function (data) {
                $('#ddModel').empty();
                $.each(data, function (index, val) {
                    var optionTag = $('<option></option>');
                    $(optionTag).val(val.Value).text(val.Text);
                    $('#ddModel').append(optionTag);
                });

                var a = '@ViewBag.Price';
            },
            error: function () {
                alert('Error');
            }
        });

しかし、ViewBag.Price にアクセスできません。

理由わかる方いますか??

ありがとう

4

1 に答える 1

0

ajax 成功関数内の ViewBag からアイテムにアクセスできない理由は、スクリプトを含むビューが Razor ビュー エンジンによって既にレンダリングされているためaです@ViewBag.Price。ページがレンダリングされました。

プロセス フローを見ると役立つ場合があります。

(1) スクリプト フラグメントを含むビューに対する要求が送信されます。

(2) ビューを返すコントローラー メソッドが呼び出されます。

(3) Razor ビュー エンジンはビューを調べ、ビュー@ViewBag.Price内の への参照を の実際の値に置き換えますViewBag.PriceViewBag.Priceまだ値がないと仮定すると、スクリプトの成功関数は次のようになります。

success: function (data) {
    $('#ddModel').empty();
    $.each(data, function (index, val) {
        var optionTag = $('<option></option>');
        $(optionTag).val(val.Value).text(val.Text);
        $('#ddModel').append(optionTag);
    });

    var a = '';
}

(4) レンダリングされた html がクライアントに送信されます

(5) ajax リクエストがトリガーされる

(6) 成功aすると、空の文字列が設定されます。

質問のコメントで述べたように、この問題の解決策はa、アクション メソッドによって返される Json オブジェクトに含めdata.a、スクリプトで使用してアクセスすることです。戻り行は次のようになります

return Json(new { 
    model =  vehModel,
    a = Price
});

これを行う場合、 ajax 成功関数のモデル データにdata.model.Field. JsonRequestBehavior.AllowGetまた、メソッドは投稿にのみ応答し、ajax リクエストは投稿であるため、オプションを指定する必要はありません。

于 2016-05-02T21:48:24.037 に答える