Обновить представление/частичное представление без использования Ajax или отправки в MVC

У меня есть ViewModel, который содержит другой тип списка

Когда загружается первая страница, я хотел отобразить список данных в раскрывающемся списке.

Когда раскрывающееся меню изменяется, я хочу отобразить список данных, характерных для этого типа.

Но я не хочу идти к своему контроллеру, так как в этом случае мне нужно выполнить поиск/запрос, где у меня уже есть все типы в моем представлении сначала.

Как я могу это сделать?

Какие-либо предложения.

Спасибо,


person Arijit Mukherjee    schedule 26.08.2014    source источник


Ответы (1)


Если вы не хотите идти на сервер (ajax\submit), вам нужно будет загрузить все данные (в первом ответе) и изменить список с помощью javascript.

Когда в поле выбора произойдет изменение, ваш javascript должен будет получить выбранное значение и обновить новый список до работать против этого.

Вот пример:

HTML:

<select id="s1"></select>
<select id="s2"></select>

JS:

var currData = ["1", "2", "3"];
var otherData = [
    ["a", "b", "c"],
    ["d", "e", "f"],
    ["g", "h", "i"]
]


for (var i = 0; i < currData.length; i++) {
    var option = $('<option value="' + currData[i] + '">' + currData[i] + '</option>');
    $("#s1").append(option);
}
// s1 and s2 are the same when the page loads.
$('#s2').html($('#s1').html());

$('#s1').change(function () {
    var idx = currData.indexOf($(this).val());
    var newSelectData = otherData[idx]; // change s2 due to s1's selection
    $('#s2').children().remove(); // clear the s2 select box
    for (var i = 0; i < newSelectData.length; i++) {
        var option = $('<option value="' + newSelectData[i] + '">' + newSelectData[i] + '</option>');
        $("#s2").append(option);
    }
});

JSFIDDLE.

person Amir Popovich    schedule 26.08.2014
comment
Вы имеете в виду отображать все данные сначала и скрывать ненужные данные? и использовать скрыть/показать в jquery? - person Arijit Mukherjee; 26.08.2014
comment
@ArijitMukherjee, это был бы единственный способ без вызова вашего контроллера, но почему вы не хотите этого делать? - person ; 26.08.2014
comment
Я отредактировал и добавил небольшой пример. Я не уверен, что это именно то, что вы хотели, но это поможет вам понять, как вы должны это сделать. - person Amir Popovich; 26.08.2014
comment
Проблема в том, что когда я использую ajax, значение не сохраняется от одного представления к другому более одного раза. один раз это может быть достигнуто с помощью TempData. - person Arijit Mukherjee; 26.08.2014