В настоящее время я пытаюсь создать новый набор каскадных выпадающих списков, следуя этим учебное пособие: http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspxкаскадные раскрывающийся список на mvc4 не обновляется ни загрузка файл JavaScript
это проблема не работает, и я в основном неграмотен на javascript (в настоящее время у меня нет времени, чтобы посидеть и изучить его), поэтому выпадающие списки не работают, только первая показывает первую информацию о иерархии.
Это то, что я сделал:
Первый контроллер:
Вот индексный метод:
public ActionResult Index()
{
var list = repo.GetParentEstablishments();
ViewBag.Parent = (new SelectList(list.ToArray(),"EstablishmentId","Name"));
return View();
}
Вот метод, который должен возвращать список детей для выбранного Отчество:
[HttpPost]
public ActionResult Children(int parentId)
{
var parents = repo.GetChildrenEstablishments(parentId);
return Json(new SelectList(parents, "EstablishmentId", "Name"));
}
Представление для индексного метода:
@using (Html.BeginForm("Index", "Ticket", FormMethod.Post, new { id = "ParentChildrenFormID", data_childrenListAction = @Url.Action("ChildrenList") }))
{
<fieldset>
<legend> Parent/Children</legend>
@Html.DropDownList("Parents", ViewBag.Parent as SelectList, "Select a Parent", new {id="ParentsID"})
<div id="ChildrenDivId">
<label for="Children">Children </label>
<select id="ChildrenID" name="Children"></select>
</div>
<p>
<input type ="submit" value="Submit" id="SubmitID" />
</p>
</fieldset>
}
<script src ="@Url.Content("~/Scripts/parentChildren.js")"></script>
И, наконец, вот файл сценария:
$(function() {
$('#ChildrenDivId').hide();
$('#SubmitID').hide();
$('#ParentsID').change(function() {
var URL = $('#ParentChildrenFormID').data('childrenListAction');
$.getJSON(URL + '/' + $('#ParentsID').val(), function (data) {
var items = '<option>Select a Children</option>';
$.each(data, function (i, child) {
items += "<option value='" + child.value+ "'>" + child.Name + "</option>";
// state.Value cannot contain ' character. We are OK because state.Value = cnt++;
});
$('#ChildrenID').html(items);
$('#StatesDivID').show();
});
});
$('#ChildrenID').change(function() {
$('#SubmitID').show();
});
});
За то, что я сумел понять из яваскрипта функции, в DIV, который имеет метку и выпадающий список для детей должен появиться скрытый когда страница загружается и появляется, когда пользователь выбирает родителя из первого списка, в настоящее время это не происходит, и вместо этого все появляется после загрузки страницы. Также, когда я выбираю родителя, во втором списке ничего не происходит, Я могу сделать вывод, что файл javascrip не выполняется в браузере пользователей, почему он не выполняется? Что я делаю не так?
Благодарим заранее, любая помощь будет оценена по достоинству.
Хорошо, поэтому мои проблемы находятся в файле javascript, я добавил ссылку JQuery на мое представление, и теперь он скрывает вторичный список и кнопку отправки, теперь проблема заключается в том, что он не отображает второй список, как только щелчок элемент на первом, может быть, я ссылаюсь на неправильный метод на моем контроллере? проблема в том, что я не знаю, где это ссылка. Я имею в виду, как узнать, какой метод я перезвоню из моего js-файла на моем контроллере? Метод, возвращающий дочерние элементы – oskar132
от родителя, называется «Дети» и получает int с именем parentId, теперь я не создал представление для этого метода, потому что из того, что я понял, вся сделка с этим заключается в том, чтобы сделать это на стороне клиента и не нужно перезагружать страницу, правильно? – oskar132
Вы отправляете запрос AJAX к действию вашего контроллера для детей. URL-адрес рассчитывается на сервере и сохраняется в атрибуте 'data-childrenListAction' в вашей форме. Его значение генерируется на сервере с помощью '@ Url.Action (« KidsList »)'. Вам не нужно создавать какое-либо представление для действия «Дети», потому что вы возвращаете JSON из него. Этот JSON затем потребляется на клиенте, а список выбора динамически строится с помощью javascript. –