2013-08-12 2 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 내 질문에 대한 답변을 얻지 못했습니다 ..... 내 솔루션은 단순히 뷰백을 설정하는 대신 추가 매개 변수를 반환함으로써 얻었지만 여전히 왜 내 뷰에서 뷰백 값을 가져올 수 없는지 궁금합니다 ..... – user2456467

+0

var a = @ ViewBag.Price; viewbag.price 주변의 콜론을 제거하십시오. – Savaratkar

답변

0

당신이 당신의 아약스 성공 함수 내부의 ViewBag에서 항목에 액세스 할 수없는 이유 때문에 스크립트가 이미 효과적으로 변수 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) 귀하의 아약스 요청이 트리거됩니다

입니다

(6) 성공한 경우 a은 빈 문자열로 설정됩니다.

질문에 언급했듯이이 문제의 해결 방법은 동작 메서드에서 반환 한 Json 개체에 a을 포함시키고 스크립트에 data.a을 사용하여 액세스하는 것입니다.

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

는이 작업을 수행 할 경우, 당신은 data.model.Field와 아약스의 성공 함수에서 모델 데이터에 액세스해야합니다 것을 명심처럼 반환 라인이 보일 것이다. 또한 메소드가 게시물에만 응답하고 아약스 요청은 게시물이기 때문에 JsonRequestBehavior.AllowGet 옵션을 지정할 필요가 없습니다.

관련 문제