Привязка формы MVC3 дублируется в двух соседних HTML-формах - PullRequest
1 голос
/ 10 июля 2011

У меня есть сценарий, где у меня есть форма входа в систему рядом с формой регистрации, так как форма входа является постоянным приспособлением (до дальнейшей разработки), и иногда регистрация в качестве основного содержимого совпадает с этой формой входа.

Теперь мы входим в сумеречную зону: обе формы выполняют разные действия на разных контроллерах, но у них есть две общие черты, поскольку у них обоих есть ValidationSummary, и у них обоих есть поле с именем UserName.Если я вызываю ошибку проверки на стороне сервера, например, когда пользователь не установил флажок «Принять условия использования», используя

ModelState.AddModelError("", "You must accept the Terms and Conditions to become a member.");

, ошибка отображается в сводках проверки обеих форм и нового пользователя.имя, то есть пользователь, пытающийся зарегистрироваться, отображается в поле UserName в обеих формах.Формы даже не разделяют общую модель представления type , не говоря уже о экземпляре.Все, что я могу попросить сделать это правильно, это вопрос WTF?

Ответы [ 2 ]

1 голос
/ 10 июля 2011

Похоже, проблема с теми же именами ввода клиента.Взгляните на BindAttribute.Prefix и TemplateInfo.HtmlFieldPrefix .Используя их, вы можете генерировать разные идентификаторы и имена клиентов для этих разных действий и моделей, и проблема, вероятно, будет решена.HtmlFieldPrefix используется для добавления префикса для идентификаторов, сгенерированных клиентом, а Bind.Prefix используется для привязки значений формы клиента, сгенерированных с помощью HtmlFieldPrefix.Оба они настроены на действие контроллера.

0 голосов
/ 11 июля 2011

Если ваши HTML-элементы имеют одинаковый идентификатор, вы можете ожидать такого поведения.Я думаю, что самое простое решение для этого - переименовать ваше имя пользователя с логином в более явное , например, LoginUserName.таким образом, вы не смешиваете две разные вещи.

Во-вторых, я предлагаю вам (если вы этого не сделали) инкапсулировать ваши функции входа в систему в отдельную форму (если это применимо), потому что вы будете отправлятьвсю страницу, включая случаи использования, которые не относятся к действию входа в систему.

...