2013-01-22 8 views
7

私のコントローラからJson結果を返し、jQueryを使用して選択リストにデータを入力しようとしています。 しかし、コードは私のコントローラのJsonメソッドにも当てはまらない。 ProductControllerjsonを返して選択リストを取り込もうとしています

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

答えて

1

あなたはJsonHijacking

は、デフォルトでは、ASP.NET MVCフレームワークを使用すると、 HTTP GETリクエストを持つに応答することはできませんフィルハークの投稿からJSON方法

JsonRequestBehavior.AllowGetを追加する必要がありますJSONペイロードJSONをGETへの応答である に送信する必要がある場合は、Json メソッドの2番目のパラメータとしてJsonRequestBehavior.AllowGetを使用して、動作を で明示的に許可する必要があります。ただし、悪意のあるユーザーが JSONペイロードにJSONハイジャッキングと呼ばれるプロセスを介してアクセスする可能性があります。 GETリクエストでJSONを使用して機密情報を返すことはしません。

6

マイSelectListの

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

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

私のJSONの方法は、あなたは、デフォルトでは無効になってGET要求に対してJSONを有効にする必要があります。

return Json(list, JsonRequestBehavior.AllowGet); 

今すぐ先に行くとFireBugをインストールします。これはJsonメソッドに2番目の引数を渡すことで起こります。この質問をStackOverflowに投稿する前に、ブラウザのAJAXリクエストを調べて、サーバが500のステータスコードを返すのを見ることができたでしょう。そして、あなたが正確なエラーメッセージを見ただけでなく、それを修正する方法についての提案も見てきました。提案は基本的に私がここに投稿した答えです。したがって、自分で解決できるように質問を投稿する必要はありませんでした。 FireBugやChrome Developer Toolsなどのツールを使わずにWeb開発をしている人たちを想像することはできません。それはあなた自身の素手でツールを使わずに家を建てようとするようなものです。

+1

クロム開発者ツールの+1とそれを提案 –

+0

質問の「addItems」というスクリプト機能は本当ですか? –

+1

ありがとう! Chrome Developer Toolsをインストールしました。 –

関連する問題