2014-01-02 2 views
0

При создании формы с моделью, содержащей объекты. Большинство из них имеют поле Id.MVC4 Решение для названий полей дубликатов формы

Если вы используете @ Html.HiddenFor() для отображения этих полей, то все они имеют то же имя, что и Id.

Мы попробовали использовать @ Html.Hidden() и указать уникальное имя как «ApplicantId» или «AddressId». Но тогда свойства Id не установлены на модели, когда они вернутся к контроллеру.

Итак, вопрос заключается в том, как использовать @ Html.Hidden() с пользовательскими именами и вернуть их в правильное поле при отправке формы?

public class PersonView { 
    public long Id { get; set; } 
} 

Мы хотим использовать

@Html.Hidden("ApplicantId", Model.Id) 

Но тогда структура не отображает поле формы ApplicantId в поле PersonView.Id, когда он получает обратно к контроллеру.

Это имеет смысл, поскольку имя ApplicantId не соответствует ни одному из свойств объекта PersonView. Есть ли атрибут для украшения свойства PersonView.Id, чтобы указать более уникальное имя?

+2

Пожалуйста, разместите некоторые из ваших классов C#, которые имеют свойства 'Id' и как они соотносятся друг с другом! – nemesv

+0

@nemesv Добавлены фрагменты кода. – Wayne

+0

Просьба опубликовать всю модель ViewModel. Я думаю, лучше исправить вашу проблему с корнем, а не пытаться заставить фрейм принять разные идентификаторы, чтобы сделать привязку. – Romias

ответ

2

Если вы используете @ Html.HiddenFor() для отображения этих полей, то все они имеют то же имя, что и Id.

То, что вы испытываете, должно быть связано с другими проблемами. Если у вас есть один ViewModel с несколькими свойствами, каждое свойство представляет собой объект со свойством «Id», когда вы поместите его в форму с помощью помощников (по крайней мере, в форме XXXFor()), идентификатор ввода стал: «YourPropertyName_Id "и" YourOtherPropertyName_Id ".

Когда вы отправляете сложную модель (модель, содержащую другие модели в качестве свойств), вам необходимо инициализировать свойства в конструкторе без параметров в модели viewmodel. Модельное связующее вызовет его, а затем заполнит его свойства. Это может быть причиной не получения идентификаторов на почте.

Идентификатор ваших входов может быть перекрытым за то, что вам нужно использовать в JavaScript, ... но он не используется, чтобы сделать модель связывания, структура использует атрибут name для этого, а не id (BTW , атрибут name формируется аналогично id, но с . вместо _, поэтому он заканчивается как YourPropertyName.Id).

+0

О, вы говорите, что нет необходимости предоставлять уникальные имена, чтобы избежать связывания коллизий. Хорошо ... мы попробуем это так. Благодарю. – Wayne

+0

Дайте нам знать @Wayne! – Romias

+1

Thank. Ты прав. Вспомогательные методы отлично обрабатываются. Вау. Очень круто. Еще раз спасибо. – Wayne

Смежные вопросы