8

コントローラーから Json の結果を返し、jQuery を使用して選択リストに入力しようとしています。しかし、コードはコントローラーの Json メソッドにもヒットしません。

私の選択リスト

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

ProductController の Json メソッド

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

2 に答える 2

6

デフォルトでは無効になっている GET リクエストに対して JSON を有効にする必要があります。Jsonこれは、メソッドに 2 番目の引数を渡すことで発生します。

return Json(list, JsonRequestBehavior.AllowGet);

さあ、インストールしてFireBugください。この質問を StackOverflow に投稿する前にそれを行っていれば、ブラウザで AJAX リクエストを調べて、サーバーが 500 ステータス コードを返すことを確認でき、応答を調べたときに正確なエラー メッセージが表示されただけでなく、つまり、それを修正する方法についての提案も見たことがあるでしょう。提案は基本的に、私が回答でここに投稿したものです。したがって、自分で解決できるため、質問を投稿する必要さえありません。FireBug や Chrome 開発者ツールなどのツールなしで Web 開発を行っている人を想像することはできません。道具を使わず素手で家を建てようとしているようなものです。

于 2013-01-22T09:53:07.383 に答える
1

JsonRequestBehavior.AllowGetjson メソッドに追加する必要があります

フィル・ハークの投稿からJsonHijacking

既定では、ASP.NET MVC フレームワークでは、JSON ペイロードを使用して HTTP GET 要求に応答することはできません。GET に応答して JSON を送信する必要がある場合は、Json メソッドの 2 番目のパラメーターとして JsonRequestBehavior.AllowGet を使用して、動作を明示的に許可する必要があります。ただし、JSON ハイジャックと呼ばれるプロセスを通じて、悪意のあるユーザーが JSON ペイロードにアクセスできる可能性があります。GET 要求で JSON を使用して機密情報を返したくない。

于 2013-01-22T09:54:43.637 に答える