2011-11-24 4 views
0

ASP MVC 3 응용 프로그램,ASP MVC 3 숨겨진 필드 다시 게시 동작

내 모델에는 IsGoodMode bool 속성이 있습니다.

내가 페이지를 처음 열 때 내보기

<%: Html.HiddenFor(m => m.IsGoodMode)%> 같은이 속성을 사용하여 내 IsGoodModefalse 값이 포함되어 있습니다. 자바 스크립트에서 IsGoodMode 값을 false에서 true으로 변경합니다. 제출 버튼을 누르고 컨트롤러 입력 모델 IsGoodMode에 true 값이 포함되어 있습니다.

컨트롤러에서 변경됨 IsGoodMode에서 false으로 변경;

보기 페이지에서 IsGoodMode는 여전히 참값을 가지고 있습니다.

 [HttpPost] 
     public ActionResult Index(SettingsModel model) 
     {         
      model.IsGoodMode = false; 
      return View(model); 
     } 

왜 이런 일이 발생합니까? 포스트 백 이후의 MVC3 바인딩 속성은 어떻게됩니까?

감사

답변

1

내 로컬에서 동일한 동작을 복제하려고했습니다. 나는 Html.HiddenFor() 도우미 메서드로 어떤 일이 일어나고 있다고 생각한다. 약간 다른 접근법을 사용하여 기능을 작동 시켰습니다.

접근법 :

  • 1 일반 HTML 숨겨진 입력 요소 Html.HiddenFor()를 대체. 나는 다음과 같은 마크 업을 사용하고 일 :

    <input type="hidden" value="<%= Model.IsActive %>" /> 
    

접근 : Html.HiddenFor 2

  • 사용 대체 구문을(). 아래 :
 <%= Html.HiddenFor(x => Model.IsActive) %> 

당신은 두 가지 방법 중 하나를 시도 할 수 있습니다 내 생각 엔 너무 당신을 위해 일해야합니다.

+0

예 1 접근 방식이지만,이 경우에는 모델에 가치를 보낼 수 없습니다. 접근법 : 2는 "버그"와 함께 작업하고 있습니다. –

+0

하나의 접근 방식을 사용하려면 "이름"속성을 추가해야합니다. 귀하의 경우 감속은 다음과 같습니다 : name 속성은 해당 속성의 이름과 정확하게 일치해야합니다. –

2

ModelState의 MSDN 문서가 짧다는, 적어도 말을 할 수 있지만,이에 대한 책임 ModelState입니다.

@ Html.BeginForm()이 처리되면 해당 컨트롤이 현재 모델의 ModelState 값으로 채워집니다 (적용 가능한 경우).

동작 메서드에서 ModelState.Clear()를 호출하여이 동작을 재정의 할 수 있습니다.

+0

@cleric은 숨겨진 필드를 초기화하는 것에 대해 이야기하고 있습니다. 질문에 텍스트 상자가 표시되지 않습니다. –

+0

ModelState.Clear()와 카운터 백을 사용하게하십시오. 참조에서 텍스트 상자를 편집하고 제거했습니다. 하지만, 모델 바인딩이 이런 일이 발생하는 이유라고 생각합니다. –