문제

행동, 행위 여기에 설명되어 있습니다 이제 ASP.NET MVC 2의 기본값으로 나타납니다 (적어도 미리보기 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 A 헤드 업을하는 사람 에게이 말이 언급되지 않았기 때문에 '구약'. 또한 알고있는 사람이 이것이 최종 구현인지 구성 가능한 기능인지 아닌지에 대해 언급 할 수 있는지 궁금하십니까? 나는 어느 쪽이든 괜찮지 만 그들이 옛날 방식으로 되돌아 가지 않기를 바랍니다! 구성 가능하는 것이 더 나을 것입니다.

편집하다: 이 시점에서 배우는 교훈은 빈 문자열 또는 foo.length> 3을 테스트하기 위해 Foo.length == 0이라는 코드를 작성하지 않기 위해 개발하는 버전입니다. string.isnullorempty (foo)를 사용하고/또는 널 먼저 확인하십시오.


업데이트: 이 질문은 왜 그들이 실제로이 변화를 일으킬 지에 대한 나의 호기심을 불러 일으켰습니다. 장애인 컨트롤을 조사하는 동안 답을 발견했다고 생각합니다. W3 HTML 사양은 a '를 정의합니다.성공적인 통제'다음과 같이 :

성공적인 제어는 제출에 "유효"입니다. 모든 성공적인 제어에는 제출 된 양식 데이터 세트의 일부로 제어 이름이 현재 값과 쌍을 이룹니다. 성공적인 제어는 양식 요소 내에 정의되어야하며 제어 이름이 있어야합니다.

다시 말해서 - 성공적인 제어는 쿼리 문자열 매개 변수로 서버로 되돌릴 수있는 컨트롤입니다. 이제 컨트롤에 유효한 값이 없으면 사양에 따라 다음과 같습니다.

컨트롤에 a가없는 경우 현재 가치 양식이 제출되면 사용자 에이전트는 성공적인 제어로 취급 할 필요가 없습니다.

( '필요하지 않은 ...'와 함께 '해석에 개방 된'언어를 발견하십시오)

그래서 나는 빈 문자열 대신 널을 보내면 특정 브라우저가 보낼 수있는 브라우저를 소환 할 수있는 브라우저가 줄어 듭니다. Foo=&Bar= 다른 사람들은 해당 쿼리 문자열 매개 변수조차 보내지 않을 수도 있습니다. 항상 해석함으로써 Foo= Foo가 전혀 없었던 것처럼 당신은 더 방어력이 있습니다.

나는 적어도 그 이유에 대해 올바른 길을 가고 있다고 생각합니다. 적어도 부분적으로 '성공적인 통제'라는 개념과 관련이 있습니다.

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

도움이 되었습니까?

해결책

Null은 실제로 무엇인지 대표하며 String 외에 다른 Nullable 유형과 호환되므로 디자인에 의한 것이라고 생각합니다.

다른 팁

나는 v1의 행동을 선호한다. V2에서 빈 문자열을 어떻게 전달할 수 있습니까? 또한 후자를 사용하면 FOO가 쿼리 매개 변수에 있는지 여부를 알 수 없습니다.

구성하는 한 가지 방법은 v2 (또는 v1)의 기본 모델 바인더를 일관된 동작을 얻는 것입니다. 나는 나 자신을 선호한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top