Вы не слишком далеко от цели использования сессии.Поскольку у MVC нет довольно раздутого (и часто уродливого) представления, вам нужно где-то хранить свою коллекцию жителей.У вас есть три варианта:
1.Используйте подход с редактируемым списком.
Здесь вы каждый раз публикуете весь список, чтобы убедиться, что ваша модель сохраняет свое состояние.(посмотрите на этот пример: http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/).
Проблемы: Вы должны иметь дело со списком, который хочет проверять каждый раз, когда вы публикуете его, что может быть проблемой, если у вас есть правила проверки наформа вашего дома.
2. Создайте клиентское решение javascript.
Это добавит новые элементы в ваш список и при этом сохранит значения для них.элементы в скрытых входах, гарантирующие, что полная модель будет передана в конце. Это может быть сложно, так как вам нужно управлять индексом каждого элемента в разметке, которую создает javascript. Например, измените это:
name="House.Residents[0].Name" id="House.Residents_0__Name"
НаИндекс, который вам нужен, когда вы добавляете элемент. Этот подход я обычно использую, но он может быть сложным. Код для получения возвращенного пустого шаблона редактора из MVC и сброса его индекса выглядит следующим образом:
function (response, index, oldindex) {
// Reset editor template index reference
response.attr("id", response.attr("id").replace("[" + oldindex + "]", "[" + index + "]"));
var inputList = response.find("input, select");
inputList.each(function (num) {
var thisEl = $(this);
// Allow for dbl input with checkbox
if (thisEl.attr("id"))
thisEl.attr("id", thisEl.attr("id").replace("_" + oldindex + "__", "_" + index + "__"));
thisEl.attr("name", thisEl.attr("name").replace("[" + oldindex + "]", "[" + index + "]"));
});
var spanList = response.find("span");
spanList.each(function (num) {
var thisEl = $(this);
if (thisEl.attr("data-valmsg-for")) {
thisEl.attr("data-valmsg-for", thisEl.attr("data-valmsg-for").replace("[" + oldindex + "]", "[" + index + "]"));
}
});
var labelList = response.find("label");
labelList.each(function (num) {
var thisEl = $(this);
if (thisEl.attr("for")) {
thisEl.attr("for", thisEl.attr("for").replace("_" + oldindex + "__", "_" + index + "__"));
}
});
return response;
}
3. Используйте сессию (или временные данные).
, чтобы временно сохранить ваш список, безусловно, самый простой, но, вероятно, наименее изящный.