У меня проблема с привязкой модели с html-помощником, который я пишу. Я объявила свойство на моей модели обрабатывать атрибуты html, короче говоря;HtmlAttributes словарь, не обязательный правильно
Затем я представляю следующий html как в Scott Hanselman's post;
<input type="hidden" id="HtmlAttributes[0]_Key" name="HtmlAttributes[0].Key" value="align" />
<input type="hidden" id="HtmlAttributes[0]_Value" name="HtmlAttributes[0].Value" value="center" />
Но обратного вызова DefaultModelBinder создает значение в виде массива строк, так что в следующий раз я сделать мой HTML значение;
_attribute.Value.ToString()
Я получаю следующий HTML;
<td align="System.String[]"></td>
Это, по-видимому, представление ToString строкового массива по умолчанию. Значение - это первый элемент!
Похоже, что связующее устройство по умолчанию путается с параметром типа значения, объявляемым как объект для словаря. Я был уверен, что следую конвенции, объявив свои htmlAttributes как Dictionary<string,object>
, как я заметил в исходном коде Html Helpers. Я пропустил что-то очевидное здесь?
EDIT:
Просто обновление, чтобы дать больше информации. Проблема привязки, которую я вижу, возникает в результате сообщения JQuery AJAX $.post
, где данные сериализуются с использованием .serialize() JQuery; При проверке отправляемых данных снова все выглядит в порядке.
HtmlAttributes%5B0%5D.Key=align&HtmlAttributes%5B0%5D.Value=center& ...
Спасибо за ваш ответ. Извините, нет элемента формы, так как это обратный вызов AJAX. Я использую JQuery's .serialize() и при проверке данных, отправляемых от клиента, все выглядит нормально. Нет дублированных значений. У меня около 30 скрытых элементов управления в контейнере div, которые все правильно привязаны, кроме словаря. – MaRk
Вы правы, проблема в другом месте. Итак, теперь у меня есть ** ответ ** для вас;) –
Ну, это легкий ответ, я думаю.Статический помощник AnonymousObjectToHtmlAttributes реализует IDictionary, который оставляет его клиенту для строгого ввода значений атрибутов. Спасибо за ваш вход Radim. –
MaRk