JsonResult中的问题

时间:2010-05-26 03:05:01

标签: asp.net jquery asp.net-mvc

我正在使用jsonresult列出一个国家/地区下的所有城市。我从数据库中检索数据并使用jquery将其加载到下拉列表中。问题是,如果城市超过3000,那么jsonresult就不起作用了。

<script type="text/javascript">
  $(document).ready(function () {
    //Hook onto the MakeID list's onchange event       
    $("#Country").change(function () {
        //build the request url
        $("#HomeTown").empty();

        var url = '<%= Url.Content("~/") %>' + "Location/GetCitiesByCountry/" + $("#Country").val();

        $.getJSON(url, function (data) {

            $.each(data, function (index, optionData) {

                $("#HomeTown").append("<option value='" + optionData.geonameid + "'>" + optionData.asciiname + "</option>");

            });
            $("#HomeTown").option[0].selected = true;
        });
    }).change();
  });
</script>

5 个答案:

答案 0 :(得分:1)

我同意@Ken。您可以做的是逐步加载数据。

所以你可以加载第一个说500,而那些显示你可以使用jQuery加载下一个500。

或者,你需要对此进行研究,你可能会得到一个jQuery下拉菜单,当你点击下拉列表的底部时,它可以让你回复。

但我认为最好的选择是尝试限制下拉列表中的数据量。

答案 1 :(得分:1)

下拉列表中的项目过多。

限制项目,或考虑使用其他控件 - 例如AutoComplete控件。

答案 2 :(得分:0)

对于下拉列表,

3000是一个非常大的数字。您应该考虑与服务器进行某种ajax交互,以根据需要对结果进行分页。类似于jQuery DataTables plugin(或任何数量的类似选项,如所讨论的here)应该会给你一个良好的开端。其中一些可以简化,以便它们只是一个下拉列表,可视化 - 但使用服务器端分页。

答案 3 :(得分:0)

http://forums.asp.net/p/1090853/1634922.aspx此链接讨论了json序列化中超出的最大长度错误。显然你可以在web.config中增加最大大小。

答案 4 :(得分:0)

除了加载速度慢或崩溃的可能性之外,从用户体验的角度来看,网页中的3000项列表是一种糟糕的设计。想象一下打开下拉列表时页面的大小。我不可能回到一个给我这么大的列表供选择的网站。

不要在列表中包含整个3000个城市,而是想办法对其进行分页。根据城市的位置(国家/州/省)或名称(字母顺序)或对您的应用有意义的任何标准对城市进行分类。