Перед тем, как начать, у меня есть очень специфический вопрос, и если вы хотите ответить на него, переходите прямо к концу.Но я приветствую комментарии и советы, следовательно, длинный пост.
Хорошо, мы имеем дело с множеством форм, и некоторые из этих форм довольно длинные и имеют много полей.У нас также есть требование - в дополнение к полям верхнего уровня - иметь возможность иметь переменное количество повторяющихся строк - как мы их называем.Например, давайте подумаем о клиенте, у которого есть имя, фамилия и возраст, в то время как у него может быть ноль или много адресов (скажем, от 0 до 10), поэтому пользователь должен иметь возможность добавлять или удалять контакты из формы при ее заполнении. Поэтому обычнопользователь получает и кнопку «Добавить», чтобы добавить больше адресов, а рядом с каждым адресом, кнопку удаления.Потенциально может быть более одного повторяющегося раздела в той же форме, но я не собираюсь туда.Дело в том, что по юридическим и историческим причинам все формы должны быть сохранены одновременно, поэтому, пока формы можно редактировать, мы не можем принять наполовину заполненную форму и иметь другую страницу для пользователей, чтобы добавлять и удалять адреса, например,
Я использую ASP NET MVC 2 (строго типизированные представления с одним универсальным контроллером) с проверкой на стороне клиента и мощными сценариями jquery для ярких функций.Мы, вероятно, очень скоро перейдем на ASP NET MVC 3, и я уже играю с 3, чтобы найти хорошее решение.Эти адреса определены в модели как List<Address>
, например,
. В настоящее время у меня есть рабочее решение для этой проблемы, но я не удовлетворен им: у меня есть помощник HTML, который называет кнопки добавления или удаления инемного JavaScript, чтобы отключить проверку и разрешить отправку формы (даже недействительной), и, поскольку я могу узнать имя кнопки, на которую нажали, у меня есть вся необходимая логика для обработки добавления или удаления, и она работает очень хорошо.
Но я отправляю сообщение, и форма перезагружается, и я ищу альтернативное решение.Вот что я могу сделать:
- Делать все на стороне клиента.Кнопка «Добавить» клонирует один из таких адресов, а кнопка «Удалить» -
remove()
элемент.Мне нужно только переименовать индексы, которые я сделал.Мы использовали календарь jquery, и он ломал новые элементы, которые я также исправил.Но проверка не работает, что, вероятно, может работать с ASP NET MVC, но это решение выглядит очень хрупким - карточный домик, который отлично смотрится, прежде чем добавить другую карту. - Разместите всю страницу с помощью Ajax изатем загрузите его снова: это, вероятно, лучше, чем мое текущее решение, но ненамного.
- Используйте ajax, чтобы опубликовать форму и получить обратно JSON, а также использовать данные для построения элементов или их удаления: Снова дом изкарта из-за обширных сценариев на стороне клиента
Сериализуйте форму и отправьте с помощью Ajax определенное действие и верните только повторяющийся раздел (как частичное представление).Действие на контроллере можно использовать повторно и вызывать из самого представления, чтобы вернуть частичное представление
ОК. Последнее - это то, над которым я работаю, но есть проблема.ASP NET MVC 3 с ненавязчивой проверкой работает, только если форма заполнена в BeginForm()
, в то время как мое представление верхнего уровня имеет BeginForm()
, но не мое частичное представление.Это работает хорошо, когда я вызываю его из представления, но не по вызову ajax, чтобы получить только повторяющийся раздел.
(Вопрос)
Так есть ли способ заставить ASP NET MVC 3 выдавать атрибуты валидационных данных независимо от того, находятся ли они в блоке BeginForm ()??Если честно, если это не ошибка, это определенно важный запрос функции. На самом деле я использовал отражатель для дизассемблирования кода, и, похоже, условие там.