Поведение описанное здесь, теперь является значением по умолчанию для ASP.NET MVC 2 (по крайней мере, для Preview 1).
При моделировании такой последовательности:
?Foo=&Bar=cat
Следующее связывание происходит (предполагая, что вы привязываетесь к модели со строковыми свойствами Foo и Bar)
ASP.NET MVC 1
model.Foo = "";
model.Bar = "cat":
ASP.NET MVC 2 (просмотр с 1 по RC)
model.Foo = null;
model.Bar = "cat":
Хотелось дать любому, кто играет с V2, хэдз-ап, так как это не упоминалось в gu-notes '. Также любопытно, может ли кто-нибудь в курсе узнать, будет ли это окончательная реализация или настраиваемая функция? Я в порядке, но надеюсь, что они не вернутся к старому пути! Быть настраиваемым будет еще лучше.
Изменить: Урок, который вы узнаете из этого момента, - это любая версия, которую вы разрабатываете, чтобы не писать код, который говорит Foo.Length == 0, чтобы проверить пустую строку или Foo.Length > 3, чтобы проверить минимальную длину. Используйте string.IsNullOrEmpty(Foo) и/или сначала проверьте значение null.
Обновление: Этот вопрос вызвал мое любопытство относительно того, почему они действительно сделают это изменение. Я думаю, что я наткнулся на ответ, исследуя отключенные элементы управления. Спецификация W3 HTML определяет 'успешный контроль' следующим образом:
Успешное управление является "действительным" для представление. Каждый успешный контроль имеет свое контрольное имя в паре с его текущее значение как часть предоставленного формы данных. Успешный контроль должен быть определен в элементе FORM и должно иметь управляющее имя.
Другими словами - успешный элемент управления - это тот, который вернет сервер на сервер в качестве параметра строки запроса. Теперь, если элемент управления не имеет допустимого значения, то согласно спецификации:
Если элемент управления не имеет текущее значениепри отправке формы пользователь агенты не обязаны рассматривать его как успешный контроль.
(укажите язык "открыто для интерпретации" здесь, "не требуется..." )
Итак, я думаю, отправив нуль вместо пустой строки, он уменьшает несовместимость браузеров, когда некоторые браузеры могут отправлять Foo=&Bar=
, а другие даже не могут отправлять этот параметр строки запроса. Всегда интерпретируя Foo=
, как если бы Foo не был там вообще, вы должны быть более защитными.
Я думаю, что я по крайней мере на правильном пути по причине, почему здесь, и, по крайней мере, частично имеет отношение к понятию "превентивного контроля".