Словарь двустороннего связывания <string, byte> в представлении MVC - PullRequest
0 голосов
/ 17 марта 2011

В моей модели есть два свойства Dictionary<string, byte>, которые должны корректно проверяться от 0 до 5 элементов.Например, свойство skill (string dropDownListLabel, byte years).

Поскольку мне нужно поддерживать не-javascript-клиенты, я отображаю в браузере все 5 входных пар, связывая только существующие элементы словаря, и жизнь прекрасна.Это дает 5 пустых пар ввода для новой простой формы HTML, каждая с уникальными именами ввода, которые я тоже хочу.

Вот сериализация (имена ввода), которую я использую:

skill[0].Key = "", skill[0].Value = ""
 ... three more pairs ...
skill[4].Key = "", skill[4].Value = ""

Нона POST, для пар «ключ / значение», в которых не указаны ни «ключ», ни «значение», ошибки проверки DefaultModelBinder приводят к значению.

Можно ли использовать тип и сериализацию, которые будут проверяться в DefaultModelBinder, когда оба или ни Ключ и значение не POSTed, поэтому MVC выполняет для меня столько работы, сколько возможно, добавляя пары в коллекцию только при наличии содержимого?

Спасибо, Шеннон

1 Ответ

1 голос
/ 17 марта 2011

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

Dictionary<string, byte?>

ОБНОВЛЕНИЕ:

Другая возможность - использовать коллекцию пользовательского типа, содержащую два свойства, каждое из которых представляетсоответственно ключ и значение.Затем используйте в своем представлении строго типизированные помощники и шаблоны редактора, чтобы вам не приходилось беспокоиться о проводном формате, и, наконец, вам необходимо убедиться, что ключи уникальны, поэтому вам потребуется собственный валидатор.Лично я использую FluentValidation.NET для этой части, но если вы используете аннотации данных, вам понадобится пользовательский атрибут, который будет использоваться для декорирования свойства коллекции в модели представления.

...