2013-08-12 82 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請求是帖子。