$ .ajax中的viewbag数据为空

时间:2013-08-12 11:29:19

标签: viewbag

我使用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。

任何人都知道原因??

感谢

1 个答案:

答案 0 :(得分:0)

您无法从ajax成功函数中的ViewBag访问项目的原因是因为包含您的脚本的视图已由Razor视图引擎呈现,有效地将变量www.mywebsite.com/de/设置为任何内容a的值是在呈现页面时。

查看流程可能会有所帮助:

(1)请求进入包含脚本片段的视图。

(2)调用返回视图的控制器方法。

(3)Razor视图引擎浏览视图,并将视图中@ViewBag.Price的所有引用替换为@ViewBag.Price的实际值。假设ViewBag.Price还没有值,则脚本中的成功函数现在是

ViewBag.Price

(4)渲染的html被发送到客户端

(5)你的ajax请求被触发

(6)成功时,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 = ''; } 被设置为空字符串。

正如您在问题的评论中提到的,此问题的解决方案是在您的操作方法返回的Json对象中包含a,并在脚本中使用a访问它。返回行看起来像

data.a

请注意,如果您这样做,则必须使用return Json(new { model = vehModel, a = Price }); 访问ajax成功函数中的模型数据。此外,您不需要指定data.model.Field选项,因为您的方法仅响应帖子而您的ajax请求是帖子。