我使用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。
任何人都知道原因??
感谢
答案 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请求是帖子。