asp.net mvc: это ошибка или особенность при использовании частичных представлений для объектов с одинаковыми именами полей? - PullRequest
0 голосов
/ 16 декабря 2009

Мои классы - это DataModel, которая использует ID в качестве своего PK, и карта, которая также имеет ID в качестве PK. Карта имеет FK для DataModel (DataModelID).

У меня есть частичное представление, которое я использую из моего списка DataModel следующим образом:

 <% foreach (var map in Model.Map)
    { %>
 <% Html.RenderPartial("MapEdit", map); %>
 <% } %>

Мой частичный вид MapEdit выглядит так:

Before: <%= Html.Encode(Model.ID) %>

<% using (Html.BeginForm()) {%>
    <label for="ID">ID:</label>
    <%= Html.TextBox("ID", Model.ID) %>
    <%= Html.ValidationMessage("ID", "*") %>
<% } %>

Когда я запускаю это, я ожидаю увидеть ([] представляет текстовое поле):

Before: 4
ID: [ 4 ]

Before: 5
ID: [ 5 ]

etc...

Где каждое число является действительным идентификатором из записи. Что я на самом деле получаю:

Before: 4
ID: [ 10 ]

Before: 5
ID: [ 10 ]

10 в этом случае является идентификатором из DataModel! Я понятия не имею, откуда это исходит, потому что пошаговое выполнение кода показывает, что Model.ID имеет правильное значение - но в какой-то момент его заменяют.

Может кто-нибудь объяснить это?

1 Ответ

2 голосов
/ 16 декабря 2009

Если Model.Map равно нулю, Model будет передано в частичное представление. Вот как работают частичные представления.

Кроме того, значения модели копируются в ModelStateDictionary, который может иметь только один ключ с именем ID. Это имеет смысл, поскольку любая отправляемая вами форма будет использовать ключи в качестве имени поля формы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...