powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Cascading DropdownList
10 сообщений из 10, страница 1 из 1
Cascading DropdownList
    #39302002
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!

ASP.NET MVC
Visual Studio Community 2015
Пытаюсь сделать зависимые комбо.

Controller:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        public ActionResult Edit(int id = 0)
        {
            ViewBag.Manufactories = new SelectList(pasportrepository.GetAllManufactories, "id", "Manufactory");
            if(pasportrepository.Find(id) == null) {
                return HttpNotFound();
            }
            return View(pasportrepository.Find(id));
        }

        [HttpPost]
        public JsonResult GetUnits(int idManufactory)
        {
            IEnumerable<tblUnit> units = pasportrepository.GetAllUnits.Where(u => u.idManufactory == idManufactory);
            return Json(units);
        }


View:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
@model pasports.Models.tblPasport
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Edit</title>
    <script src="~/Scripts/jquery.min.js"></script>
    <script src="~/Scripts/dropdown.cascade.js"></script>
</head>
<body>
    <div class="container"> 
        @using(Html.BeginForm()) {
            @Html.ValidationSummary(true)

            <fieldset>
                <legend>Pasports</legend>
                @Html.HiddenFor(model => model.id)

                <div class="editor-label">
                    @Html.LabelFor(model => model.ExplYear, "Дата пуска в эксплуатацию")
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.ExplYear)
                    @Html.ValidationMessageFor(model => model.ExplYear)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.DateVerify, "Дата поверки")
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.DateVerify)
                    @Html.ValidationMessageFor(model => model.DateVerify)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.CountCheck, "Периодичность поверки")
                </div>
                <div class="editor-field">
                    @Html.DropDownList("Periods")
                    @Html.ValidationMessageFor(model => model.CountCheck)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.Factory, "Предприятие")
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.Factory)
                    @Html.ValidationMessageFor(model => model.Factory)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.idManufactory, "Цех")
                </div>
                <div class="editor-field">
                    @Html.DropDownList("Manufactories")
                    @Html.ValidationMessageFor(model => model.idManufactory)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(model => model.idUnit, "Агрегат")
                </div>
                <div class="editor-field">
                    @Html.DropDownList("Units", new SelectList(string.Empty, "id", "Unit"), string.Empty, new { style = "width:250px", @class = "dropdown1" })
                    @Html.ValidationMessageFor(model => model.idUnit)
                </div>

                <p><input type="submit" value="Save" /></p>
            </fieldset>
        }
        <div>   
            @Html.ActionLink("Back to List", "Index")
        </div>
    </div>
</body>
</html>


Script:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
$(document).ready(function ()
{ 
    //Dropdownlist Selectedchange event 
    $("#Manufactories").change(function () 
    { 
        $("#Units").empty(); 
        $.ajax({ 
            type:'POST', 
            url: '@Url.Action("GetUnits")', 
            dataType: 'json', 
            data: { id: $("#Manufactories").val() },
            success: function (units) 
            { 
                $.each(units, function (i, Unit)
                { 
                    $("#Units").append('<option value="'
                     + Unit.id + '">'
                     + Unit.Unit + '</option>');
                }); 
            }, 
            error: function (ex) 
            { 
                alert('Failed to retrieve units.' + ex);
            } 
        }); 
        return false; 
    }) 
}); 



После выбора наименования цеха ожидаю, что во втором комбо отобразится список агрегатов этого цеха. Однако получаю по морде ошибку(см. рис.)

Что делаю не так и как исправить. Предполагаю, что где-то в скрипте накосячил, но не могу понять где.
Заранее благодарю.
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39302016
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agapov_stas,

если Что делаю не так и как исправить. Предполагаю, что где-то в скрипте накосячил, но не могу понять где.
то в этом случае помогает отладка.
оператором debugger пользовался ?
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39302024
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrU , по javascript нет...
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39302026
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agapov_stas,
Поставить в error event и посмотреть:
Код: javascript
1.
2.
3.
4.
5.
  error: function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR);
    alert(textStatus);
    alert(errorThrown);
}
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39302353
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Agapov_stas, метод GetUnits ожидает на входе числовой параметр с именем idManufactory, а Вы зачем-то объект передаете.
При этом JSON.stringify забыли. И почему-то POST-ом, а не GET-том.
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39302355
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя... Назовите ключ в объекте data, также как и параметр в методе
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39302606
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron , добавил, однако выводилось пустое сообщение в окне(окнах).
skyANA , спасибо, нашел пример, более наглядный для меня(в плане кода). Сейчас код скрипта такой:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
$(document).ready(function () {
        $("#Unit").prop("disabled", false);
        $("#Manufactory").change(function () {
            if ($("#Manufactory").val() != "Select") {
                var ManufactoryOptions = {};
                ManufactoryOptions.url = "GetUnits";
                ManufactoryOptions.type = "POST";
                ManufactoryOptions.data = JSON.stringify({ idManufactory: $("#Manufactory").val() });
                ManufactoryOptions.datatype = "json";
                ManufactoryOptions.contentType = "application/json";
                ManufactoryOptions.success = function (units) {
                    $("#Unit").empty();
                    for (var i = 0; i < units.length; i++) {
                        $("#Unit").append("<option value=" + units[i].id + ">" + units[i].Unit + "</option>");
                    }
                    $("#Unit").prop("disabled", false);
                };
                ManufactoryOptions.error = function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR);
                    alert(textStatus);
                    alert(errorThrown);
                };
                $.ajax(ManufactoryOptions);
            }
            else {
                $("#Unit").empty();
                $("#Unit").prop("disabled", true);
            }
        });
    });



- ошибок не выводит, однако вместо ожидаемого списка агрегатов получаю список с текстом "undefined".
С первого взгляда, вроде все правильно написал...(?) Вместо id и Unit в units[i] , ставил Value и Text, - эффект тот же.

Если оставить ("<option value=" + units[i] + "</option>"), список отображается, однако в списке вместо "undefined" - тест html моего view

Вот такая каша выходит..
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39303071
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что это вообще за синтаксис такой

units.[Object object] 7777
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39303141
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique , я смотрел примеры из stackoverflow.
Если знаете как правильно, - буду благодарен дельному совету.
...
Рейтинг: 0 / 0
Cascading DropdownList
    #39304436
Agapov_stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все таки, кто может подсказать, что не так делаю?
Или хотя бы привести рабочий пример, чтобы по аналогии сделать?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Cascading DropdownList
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]