2013-01-22 33 views
7

Tôi đang cố gắng trả lại kết quả Json từ bộ điều khiển của tôi và điền một danh sách chọn bằng cách sử dụng jQuery. Nhưng mã thậm chí không nhấn phương pháp Json trong bộ điều khiển của tôi.Cố gắng trả lại json và điền vào danh sách lựa chọn

SelectList My

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

javascript My

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

My Json phương pháp trong 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); 
} 

Trả lời

1

bạn cần phải thêm JsonRequestBehavior.AllowGet trong phương pháp json bạn

từ Phil Haack bài JsonHijacking

Theo mặc định, khuôn khổ ASP.NET MVC không cho phép bạn để đáp ứng một yêu cầu HTTP GET với một tải trọng JSON. Nếu bạn cần gửi JSON trong phản hồi đến GET, bạn cần cho phép rõ ràng hành vi bằng cách sử dụng JsonRequestBehavior.AllowGet làm tham số thứ hai cho phương thức Json . Tuy nhiên, có khả năng người dùng độc hại có thể truy cập vào tải trọng JSON thông qua quá trình được gọi là Hijacking JSON. Bạn không muốn trả lại thông tin nhạy cảm bằng cách sử dụng JSON trong yêu cầu GET.

6

Bạn nên cho phép JSON cho các yêu cầu GET được tắt theo mặc định. Điều này xảy ra bằng cách thông qua một cuộc tranh luận thứ hai với phương pháp Json:

return Json(list, JsonRequestBehavior.AllowGet); 

Bây giờ đi trước và cài đặt FireBug. Nếu bạn đã thực hiện điều đó trước khi đăng câu hỏi này lên StackOverflow, bạn có thể đã kiểm tra yêu cầu AJAX trong trình duyệt và có thể thấy rằng máy chủ trả về 500 mã trạng thái và khi bạn kiểm tra phản hồi, bạn sẽ thấy thông báo lỗi chính xác và không chỉ rằng - bạn cũng sẽ thấy một gợi ý về cách khắc phục nó. Đề xuất về cơ bản là những gì tôi đăng ở đây trong câu trả lời của tôi. Vì vậy, bạn thậm chí sẽ không có nhu cầu đăng câu hỏi của bạn như bạn sẽ có thể giải quyết nó một mình. Tôi không thể tưởng tượng những người đang phát triển web mà không có công cụ như FireBug hoặc Công cụ dành cho nhà phát triển Chrome. Nó giống như cố gắng xây nhà bằng tay trần của chính bạn và không có bất kỳ dụng cụ nào.

+1

+1 cho công cụ dành cho nhà phát triển Chrome và đề xuất nó –

+0

Chức năng tập lệnh của câu hỏi có tên là "addItems" có đúng không? –

+1

Cảm ơn! Tôi hiện đã cài đặt Công cụ dành cho nhà phát triển Chrome. –

Các vấn đề liên quan