2013-08-12 3 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 внутри Ajax функции успеха потому, что вид, который содержит сценарий уже оказываемого вид двигателя 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 устанавливается в пустую строку.

Как вы упомянули в комментариях к вашему вопросу, решение этой проблемы состоит в том, чтобы включить a в объект Json, возвращаемый вашим методом действий, и получить к нему доступ с помощью data.a в вашем скрипте. Возвратная линия будет выглядеть

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

Имейте в виду, что если вы сделаете это, вы будете иметь доступ к данным модели в вашем АЯКС функция успеха с data.model.Field. Кроме того, вам не нужно указывать опцию JsonRequestBehavior.AllowGet, так как ваш метод отвечает только на сообщения, а ваш запрос ajax - это сообщение.

Смежные вопросы