2013-01-22 19 views
7

Denetleyicimden bir Json sonucu döndürmeye ve jQuery'yi kullanarak bir seçim listesi yerleştirmeye çalışıyorum. Ancak kod, denetleyicideki Json yöntemine bile çarpmadı. ProductControllerjson'u döndürmeye ve seçim listesini doldurmaya çalışıyor

[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); 
} 

cevap

1

Eğer JsonHijacking

Varsayılan olarak, ASP.NET MVC framework Eğer bir HTTP GET isteği ile cevap izin vermez Phil Haack yayından json yöntemiyle

yılında JsonRequestBehavior.AllowGet eklemem gerekiyor JSON yükü. Bir GET'e cevabında JSON göndermeniz gerekiyorsa, JsonRequestBehavior.AllowGet'i Json yöntemine ikinci parametre olarak kullanarak davranışına açıkça izin vermeniz gerekir. Bununla birlikte, kötü niyetli bir kullanıcının JSON Hijacking olarak bilinen bir süreçte JSON yükü için erişim kazanma şansı vardır. Bir GET isteğinde JSON kullanarak hassas bilgileri döndürmek için yapmazsınız.

6

yılında

Benim SelectList

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

Benim 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> 

Benim Json yöntemi varsayılan olarak devre dışıdır GET istekleri için JSON imkan vermelidir. Bu Json yöntemine ikinci bir argüman ileterek olur:

return Json(list, JsonRequestBehavior.AllowGet); 

Şimdi devam edin ve FireBug yükleyin. Bu soruyu StackOverflow'a göndermeden önce yapmış olsaydınız, tarayıcınızda AJAX isteğini incelemiş olabilirsiniz ve sunucunun 500 durum kodu döndürdüğünü ve yanıtı incelediğinizde tam olarak hata mesajını görebilmeniz gerektiğini ve Bunu - nasıl düzelteceğinize dair bir öneri görecektiniz. Öneri, benim cevabımda burada yayınladığım şey. Böylece kendi başınıza çözebildiğiniz için sorunuzu gönderme gereği duymadınız. Kullanıcıların, FireBug veya Chrome Geliştirici Araçları gibi bir araç olmadan web geliştirme yaptıklarını hayal bile edemiyorum. Kendi ellerinizle ve hiçbir alet kullanmadan bir ev inşa etmeye çalışmak gibi.

+1

+1 geliştirici araçları için +1 ve öneriyor –

+0

"addItems" adlı sorusunun senaryo işlevi true? –

+1

Teşekkürler! Chrome Geliştirici Araçları'nı yükledim. –

İlgili konular