1

У меня проблема с привязкой модели с 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& ... 

ответ

0

Ваш код представляется правильным. Проверьте <form>, отправленный на сервер. Там, скорее всего, будет удвоено Name HtmlAttributes[0].Value

<input name="HtmlAttributes[0].Value" ... ... <input name="HtmlAttributes[0].Value" ...

Это заканчивается с а не signle но множественным значением ... т.е. System.String[]

EDIT: выпуск

Изменение общественного IDictionary<string,object> HtmlAttributes { get; set; }

в

IDictionary<string,string> HtmlAttributes { get; set; } 

Значение должно быть типа строки заставить ModelBinder к correclty covnert необработанного значения

+0

Спасибо за ваш ответ. Извините, нет элемента формы, так как это обратный вызов AJAX. Я использую JQuery's .serialize() и при проверке данных, отправляемых от клиента, все выглядит нормально. Нет дублированных значений. У меня около 30 скрытых элементов управления в контейнере div, которые все правильно привязаны, кроме словаря. – MaRk

+0

Вы правы, проблема в другом месте. Итак, теперь у меня есть ** ответ ** для вас;) –

+0

Ну, это легкий ответ, я думаю.Статический помощник AnonymousObjectToHtmlAttributes реализует IDictionary , который оставляет его клиенту для строгого ввода значений атрибутов. Спасибо за ваш вход Radim. – MaRk