ASP.NET MVC, каскадный выпадающий список jQuery / AJAX с LINQ2SQL? - PullRequest
1 голос
/ 14 апреля 2009

Помещение: Получить выпадающий список содержимого на основе значения, выбранного в первом. Литеральные данные возвращаются успешно. Сбой запросов LINQ для текстового текста LINQ2SQL.

Будучи абсолютным новичком в этом материале MVC / LINQ / jQuery, я боролся за ЧАСЫ, пытаясь выяснить, что не так с моим пониманием кода. Когда я жестко запрограммировал свои значения, все работало нормально, но как только я попытался запросить текст данных LINQ2SQL, начались всевозможные странные вещи и, наконец, когда я продублировал результаты запроса в новый объект, все снова заработало! Простите за отсутствие у меня лингвистического мастерства, когда дело доходит до LINQ, но я думаю, что это связано с «связностью» данных LINQ2SQL. Когда я создаю другой список, представляющий запрашиваемые данные, все хорошо, но если я пытаюсь использовать сами запрашиваемые данные, мир jQuery разваливается (и без ошибок тоже - что затрудняет его выяснение).

Мне бы хотелось получить ссылку или объяснение "связности" LINQ2SQL и того, как / почему это проблема, особенно в таких ситуациях удаленного / асинхронного вызова!

См. Код ниже - надеюсь, что это имеет смысл и заранее спасибо :) Базовая планировка:

<script type="text/javascript">

        $(document).ready(function() {
            $("#CaseTypeCategoryId").change(function() {
                $.getJSON("/Cases/CaseNatures", { caseTypeCategoryId: $("#CaseTypeCategoryId option:selected").val() }, function(data) {
                    $("#CaseNatureId option").remove();
                    $("#CaseNatureId").fillSelect(data);
                });
            });
        });

    </script>
            <p>
                <label for="CaseTypeCategoryId">Case Type:</label>
                <%= Html.DropDownList("CaseTypeCategoryId") %>
            </p>
            <p>
                <label for="CaseNatureId">Case Nature</label>
                <select id="CaseNatureId" name="CaseNatureId></select>
            </p>

Controller.aspx

Первоначально это был просто

SelectList() { new ListItem() { Text = "--Select A Case Nature--", Value = "" }}
и это работало просто отлично! Тогда я попробовал
public JsonResult CaseNatures(int caseTypeCategoryId)
        {
            return this.Json(_caseService.GetCaseNatures(caseTypeCategoryId)
                        .ToList());
        }

Это не удалось - без ошибок javascript, без проблем с компиляцией, я не мог понять это, пока я не попытался сбросить данные в новый список вручную, и я наконец остановился на:

public JsonResult CaseNatures(int caseTypeCategoryId)
        {
            List returnList = new List();
            returnList.Add(new ListItem() { Text = "--Select A Case Nature--", Value = "" });

            _caseService.GetCaseNatures(caseTypeCategoryId)
                        .ToList()
                        .ForEach(p => returnList.Add(new ListItem() { Value = p.CaseNatureId.ToString(), Text = p.CaseNatureText }));
            return this.Json(returnList);
        }

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Используйте JsonRequestBehavior.AllowGet в вашем предложении:

this.Json (_caseService.GetCaseNatures (caseTypeCategoryId) .ToList (), JsonRequestBehavior.AllowGet);

1 голос
/ 30 апреля 2009

Смотрите здесь - похожая проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...