2013-08-12 52 views
2

Iam使用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

hmmmmm没有得到我的问题的任何回应.....虽然我简单地通过返回额外的参数,而不是设置viewbag,但仍然奇怪为什么不能获得viewbag值在我看来.....我的解决方案..... – user2456467

+0

var a = @ ViewBag.Price; 移除viewbag.price周围的冒号。 – Savaratkar

回答

0

您无法访问您的阿贾克斯成功函数内从ViewBag项目的原因是因为包含脚本已经由Razor视图引擎进行渲染,有效地设置可变a视图无论@ViewBag.Price在页面呈现时的价值如何。

望着流程可能会有所帮助:

(1)请求进入有你的脚本片段在它的视图。

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

(3)Razor视图引擎遍历视图,并将视图中的@ViewBag.Price的任何引用替换为实际值ViewBag.Price。假设ViewBag.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被设置为空字符串。

正如你在你的问题的评论中提到的,解决这个问题的方法是在你的操作方法返回的Json对象中包含a,并在你的脚本中使用data.a来访问它。回油管路会是什么样子

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

请记住,如果你这样做,你必须访问模型数据在阿贾克斯成功函数data.model.Field。此外,您不需要指定JsonRequestBehavior.AllowGet选项,因为您的方法只响应帖子,而您的ajax请求是帖子。