2012-06-01 2 views
2

중요한 질문은 아니지만 확실히 볼 수있는 좋은 질문입니다. (POST 후에 내 코드에서MVC3 고객이 설정 한 모델 값 중지

public class NewUser 
{ 
    [Required] 
    public string Username{ get; set; } 
    [Required] 
    public string Password{ get; set; } 

    public string Salt{ get; set; } 
} 

:

나는, 예를 들어, 다음과 같습니다 모델은 (난 내가 확인 필드 등 :)해야합니까, 일부 저장 독서 시간을 잘라하지) 않은 유효성 검사 후) 암호를 암호화하는 데 사용되는 소금을 만들고, 모델에서 사용하는 것이 매우 유용합니다 (나는 그것을 버릴 수 있지만 차라리 사용하지 않을 것임을 알고 있습니다).

포스트에서 사용자가 쿼리 문자열 &salt=blahblahblah을 추가하면 페이지가 게시되고 MVC가 모델과 일치하자마자 예상대로 예상대로 모델 blahblahblah에 값이 할당됩니다. 문제가 없습니다. 이것으로 항상 이것을 무시할 수 있습니다.

MVC에서 모델의 값을 포스트 백에서 보낸 값에 할당하지 않도록 할 수있는 방법이 있습니까? 다른 모델에서 일부 값은 가능성을 갖기를 원치 않으므로 설정해야한다. (필자는 해결해야 할 문제를 해결할 수있는 해결 방법을 가지고 있지만 일부 값을 해킹하려는 경우 문제가 발생할 수있다.)

답변

5

당신은 modelbinding 동안 블랙리스트/화이트 속성에 BindAttribute를 사용할 수 있습니다

당신은 세계적으로 모델 수준에서 적용 할 수 있습니다 :

:
[Bind(Exclude="Salt")] 
public class NewUser 
{ 
    [Required] 
    public string Username{ get; set; } 
    [Required] 
    public string Password{ get; set; } 

    public string Salt{ get; set; } 
} 

또는 개별 컨트롤러 액션의 수준에

public ActionResult MyAction([Bind(Exclude="Salt")] NewUser user) 
{ 
    //... 
} 
+0

똑똑하고 완벽하게 작동합니다. 나는이 정확한 답을 기대하지 않았고, 아직 받아 들일 수조차 없다. 맨 위에 콤마리스트 대신'Salt'보다'[Exclude]'를 추가하는 것과 같은 모델의 속성별로 수행하는 방법을 알고 있습니까? 그 방법을 사용하는 것에는 문제가 없으며, 그것을 수행하는 방법의 전체 그림을 얻으려는 것입니다. – JakeJ

+0

아니요, 클래스 또는 액션 메서드 매개 변수 수준에서만 쉼표로 구분 된 속성 목록과 함께 사용할 수 있습니다. 특성 레벨에 적용 할 수있는 새 속성을 원하면 모델 바인딩을 확장해야합니다. – nemesv

+0

다른 양식에 이미 존재하는 경우 무언가를 만들 때 아무런 의미가 없습니다. 덕분에 그 방법을 직접 들어 보지 못했습니다 :) – JakeJ