2010-05-04 5 views
1

VS 2008에 있던 MVC 1.0 웹 응용 프로그램이 있습니다. MVC를 자동으로 2.0으로 업그레이드 한 VS 2010으로 프로젝트를 업그레이드했습니다.Button Onclick 이벤트 (codbehind에 있음)가 MVC 2에서 트리거되지 않습니다.

나는 수동으로 추가 된 코드 숨김 파일이있는 뷰 페이지 모음이 있습니다. 이 프로젝트는 업그레이드 전에는 훌륭하게 작동했지만 지금은 onclick이 실행되지 않습니다.

e.e. 코드 숨김의 메소드를 가리키는 onclick 이벤트가있는 asp : 버튼이 있습니다. 단추를 클릭하면 onclick 이벤트가 트리거되지 않습니다. 사실, Page 변수를 보면 IsPostBack은 false입니다.

이것은 정말 기괴한 일이며 어떤 일이 일어 났는지 그리고 어떻게 수정해야하는지 궁금합니다. MVC 2.0의 변경 사항과 관련이 있다고 생각합니다. 그러나 나는 확실하지 않다.

도움이 정말 감사합니다, 나는 이것을 한동안 알아 내려고 노력해 왔습니다.

(코드 숨김을 삭제하고 컨트롤러로 이동하는 것은 실제로 많은 옵션이 있으므로 실제로 vs 2008로 다시 이동하는 것이 성능과 같은 VS 2010 기능 중 일부를 사용하려는 마지막 수단입니다. 테스트).

+2

코드 숨김 및 OnClick 이벤트와 함께 MVC를 사용하면 MVC 사용의 요점을 놓치게됩니다.그 코드 숨김 페이지를 리팩토링합니다. – jfar

+0

나는 코드 비하인드에 반대하거나 논쟁하려고하지 않을 것이지만, 이것이 그 방법이다. 나는 누군가가 onclicks가 발사하지 않는 이유를 알고 있는지 묻습니다 - MVC로만 변경하라는 제안이 아닙니다. 전에 말했듯이, 그건 선택 사항이 아닙니다. – rksprst

답변

5

코드 비헤이비어 사용은 MVC 패턴 위반이며 지원되지 않습니다. 이것이 MVC 1에서 작동했다는 사실은 실수로 의도하지 않은 것입니다.

프로젝트가 너무 커서 코드 숨김을 제거하고 해당 논리를 컨트롤러로 옮길 수 없습니다. 대안으로, WebForms 포스트 백 모델이 여기 페이지에 적합하다는 것을 알게되면 웹 사이트 WebForms (MVC 파이프 라인을 거치지 않고 true .aspx)의이 부분을 만들고 싶을 수도 있습니다. 이 페이지를 MVC로 변환하는 것보다 쉬운 작업 일 수 있습니다. MVC와 WebForms는 같은 애플리케이션에서 행복하게 공존한다는 것을 기억하십시오.

그렇지 않으면 시간 제약으로 인해 MVC 1 + VS2008로 되돌아가는 것이 가장 좋습니다.

+0

+1 (실제로는 며칠 전) - 패턴이 얼마나 자주 남용되고, 그 남용이 프로젝트에 뿌려지게 된 다음, 사람들은 결국 블랙홀로만 기술 될 수있는 코드로 끝나는 것이 놀랍습니다. –

2

좋아요. 그래서이 프로젝트가이 난장판에 있다는 사실은 당신이 정리할 수있는 것이 아닙니다. 아마도 프로젝트에 대한 궁극적 인 책임이있는 사람과 대화 할 필요가있을 것입니다. 다른 답변 상태 - 그것은 지원되지 않으며 결코해야합니다.

제쳐두고, 귀하의 질문은 더 이상 작동하지 않는 이유와 관련이 있습니다. viewstate 및 eventvalidation 숨겨진 입력이 페이지로 다시 전송되지 않기 때문에 그것이 자연스러운 추측을 취할 것입니다. Asp.Net 3.5 (따라서 Asp.Net 4)에서 IsPostBack은 페이지를 시작하는 데 사용 된 http 메서드가 아닌 숨겨진 두 값에서 감지됩니다.

즉, 문제는 실제로 MVC2가 문제가 아닌 들어오는 요청을 좋아하지 않는 Asp.Net 4 일 수 있습니다. 뷰가 렌더링되는 방식에는 많은 변경이 없었고 추가가 많이있었습니다.

웹 사이트가 Asp.Net을 실행하도록 업그레이드 된 경우 4 - 3.5로 되돌리고 수정했는지 확인하십시오.

그렇지 않으면, 3.5로 돌아가는 리바이스의 답변과 MVC1이 최선의 방법이라고 생각합니다.

그런 다음 향후 버전에서이 MVC 사용을 제거하기 위해 전체 코드 검토를 권장 할 것입니다.

관련 문제