Подтвердить что ты не робот

Modelbinding для пустых параметров строки запроса в ASP.NET MVC 2

Поведение описанное здесь, теперь является значением по умолчанию для 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 не был там вообще, вы должны быть более защитными.

Я думаю, что я по крайней мере на правильном пути по причине, почему здесь, и, по крайней мере, частично имеет отношение к понятию "превентивного контроля".

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2

4b9b3361

Ответ 1

Null более репрезентативен тем, чем он на самом деле является, и он совместим с другими типами NULL помимо строки, поэтому я представляю его по дизайну.

Ответ 2

Я предпочитаю поведение v1. Как вы сможете передать пустую строку в v2? Кроме того, с последним вы не можете определить, находится ли foo в параметрах запроса или нет.

Ответ 3

Один из способов настройки - заменить стандартное связующее устройство в V2 (или V1), чтобы получить согласованное поведение. Я предпочитаю нуль, сам.