Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Cascading DropdownList / 10 сообщений из 10, страница 1 из 1
01.09.2016, 14:52
    #39302002
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
Всем доброго дня!

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
01.09.2016, 15:06
    #39302016
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
Agapov_stas,

если Что делаю не так и как исправить. Предполагаю, что где-то в скрипте накосячил, но не могу понять где.
то в этом случае помогает отладка.
оператором debugger пользовался ?
...
Рейтинг: 0 / 0
01.09.2016, 15:14
    #39302024
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
monstrU , по javascript нет...
...
Рейтинг: 0 / 0
01.09.2016, 15:16
    #39302026
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
Agapov_stas,
Поставить в error event и посмотреть:
Код: javascript
1.
2.
3.
4.
5.
  error: function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR);
    alert(textStatus);
    alert(errorThrown);
}
...
Рейтинг: 0 / 0
01.09.2016, 23:23
    #39302353
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
Agapov_stas, метод GetUnits ожидает на входе числовой параметр с именем idManufactory, а Вы зачем-то объект передаете.
При этом JSON.stringify забыли. И почему-то POST-ом, а не GET-том.
...
Рейтинг: 0 / 0
01.09.2016, 23:32
    #39302355
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
Хотя... Назовите ключ в объекте data, также как и параметр в методе
...
Рейтинг: 0 / 0
02.09.2016, 12:15
    #39302606
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
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
03.09.2016, 11:26
    #39303071
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cascading DropdownList
Что это вообще за синтаксис такой

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


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