2012-03-22 1 views
1

원래 어떤 이유로 View에 전송 된 Id를 유지하기 위해 숨겨진 필드를 사용해야했습니다 (ViewModel이이 ID로 내보기로 전송 됨). 나는 유효한 ID 값을 보내고 있다는 것을 안다 ... 그것은 문제가 아니다.PostBack에서 값을 잃을

예를 들어 CarId가있는 ViewModel을 사용하고 있습니다. 런타임 동안, 나는 그것을 확인하고 유효한 정수,이보기로 보낸 컨트롤러의 동작에서 전달한 것과 동일한 정수입니다.

면도기를 통해 뷰의 마크 업에서 Id를 사용하거나 참조하지 않기 때문에 다시 게시하는 동안 문제가 지속되지 않는다고 생각합니다. 마크 업에서 해당 필드를 참조하면 포스트 백이 포함/유지됩니다.

전체 모델 자체를 유지하도록 지정하는 레이아웃에도이 컨트롤러가 관련 업데이트 컨트롤러에서 업데이트 작업을 수행 할 때 해당 ID를 사용하지 않을 때이 ID가 유지되지 않습니다.

이 게시물 다시, 내가있을 때
@using (Html.BeginForm(null, null, FormMethod.Post, new { @model = Model })) 

그래서이 추가 그렇지 않으면 이드 내가 펀더멘털 여기에 누락 알고 뷰 모델

@Html.HiddenFor(model => model.CarId) 

사람의 다른 값으로 유지되지 않습니다?

+0

예, 숨김을 사용해야합니다. 악의적 인 사용자가 파이어 버그 같은 것을 통해 그 값을 변경할 수 있으므로, 그 필드의 내용을 서버 측에서 두 배로 늘려야합니다 (예 : ID가 현재 사용자의 유효한 개체 중 하나인지 확인). – Romias

답변

1

POST 작업은 실제로 양식에있는 데이터 만 수신합니다.
마술처럼 나머지 모델을 가져 오는 것은 아닙니다.

또한 공격자는이 데이터를 모두 수정할 수 있습니다.

+0

그러나 심지어 내가 내 Html.BeginForm 내부에서 모델을 리바 인딩하도록 지정 했더라도 생각 했으므로 포스트 백을 위해 유지할 모델 유형을 다시 설정합니다. – user1286569

+0

URL에 쿼리 문자열 매개 변수가 추가되지만 브라우저는 폼을 제출하기 전에 쿼리 문자열 매개 변수를 삭제합니다. 숨겨진 입력을 사용해야합니다. – SLaks

관련 문제