2013-01-22 10 views
7

Próbuję zwrócić wynik Json z mojego kontrolera i wypełnić listę wyboru za pomocą jQuery. Ale kod nie uderzył nawet w metodę Json w moim kontrolerze.Próba powrotu json i wypełnienia listy wyboru

Moja SelectList

<select id="MyList"></select> 

Moje javascript

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getJSON("@Url.Action("GetProductJson", "Product")", null, function (data) { 
      $("#MyList").addItems(data); 
     }); 
    }); 

    $.fn.addItems = function (data) { 
     return this.each(function() { 
      var list = this; 
      $.each(data, function (index, itemData) { 
       var option = new Option(itemData.Text, itemData.Value); 
       list.add(option); 
      }); 
     }); 
    }; 
</script> 

metoda My Json w ProductController

[HttpGet] 
public JsonResult GetProductJson() 
{ 
    var list = new List<SelectListItem> 
      { 
       new SelectListItem { Value = "1", Text = "Aron" }, 
       new SelectListItem { Value = "2", Text = "Bob" }, 
       new SelectListItem { Value = "3", Text = "Charlie" }, 
       new SelectListItem { Value = "4", Text = "David" } 
      }; 

    return Json(list); 
} 

Odpowiedz

1

trzeba dodać JsonRequestBehavior.AllowGet w swojej metodzie json

z Phil Haack postu JsonHijacking

Domyślnie framework ASP.NET MVC nie pozwala odpowiedzieć na żądania HTTP GET z ładunek JSON. Jeśli chcesz wysłać odpowiedź JSON w odpowiedzi na GET, musisz jawnie zezwolić na zachowanie przez używając JsonRequestBehavior.AllowGet jako drugiego parametru metody Json . Istnieje jednak szansa, że ​​złośliwy użytkownik uzyska dostęp do ładunku użytecznego JSON w procesie znanym jako JSON Hijacking. Użytkownik nie chce zwracać poufnych informacji za pomocą JSON w żądaniu GET.

6

Należy umożliwić JSON żądań GET, który jest domyślnie wyłączony. Dzieje się to przez przepuszczanie drugiego argumentu metody Json:

return Json(list, JsonRequestBehavior.AllowGet); 

Teraz śmiało zainstalować FireBug. Jeśli zrobiłeś to przed opublikowaniem tego pytania na StackOverflow, mógłbyś przejrzeć żądanie AJAX w przeglądarce i mógłbyś zauważyć, że serwer zwraca kod stanu 500 i kiedy sprawdziłeś odpowiedź, zobaczyłbyś dokładny komunikat o błędzie i nie tylko to - Ty też widziałbyś sugestię, jak to naprawić. Sugestia jest w zasadzie tym, co napisałem tutaj w mojej odpowiedzi. W ten sposób nie musiałbyś nawet publikować swojego pytania, ponieważ byłbyś w stanie rozwiązać go samodzielnie. Nie mogę sobie wyobrazić ludzi, którzy tworzą oprogramowanie bez narzędzi takich jak FireBug czy Narzędzia dla programistów Chrome. To tak, jakby próbować zbudować dom własnymi gołymi rękami i bez żadnych narzędzi.

+1

+1 dla narzędzi dewelopera chrome i sugerowanie go –

+0

Czy funkcja skryptu jego pytania o nazwie "addItems" jest prawdziwa? –

+1

Dzięki! Mam już zainstalowane narzędzia dla programistów Chrome. –

Powiązane problemy