2009-07-08 3 views
0

사용자가 자신의 계정에 주소를 추가 할 수있는 섹션이 있습니다. 그들은 필요한만큼 (선적, 청구서 발송 등) 추가 할 수 있습니다..NET MVC 여러 버전의 동일한보기가 하나의보기에 있음

주소를 추가 한 후 사용자는 "저장"및 "삭제"버튼이있는 업데이트 양식으로 주소를 볼 수 있도록 설정했습니다. 사용자는 자신이 추가 한 주소를 조정할 수 있습니다.

내가 겪고있는 문제는 유효성 검사에 있습니다. Line 1이 필요하다고 가정 해 보겠습니다. 세 번째 주소 중 두 번째 주소를 업데이트하고 Line 1을 비워두면 컨트롤러가 오류를 발생시킵니다 (BTW Nerd Dinner와 동일한 기술 사용). 이것은 좋다. 나쁜 점은보기에 나열된 모든 주소의 주소 정보가 모두 오류가 발생한 주소의 값으로 표시된다는 것입니다.

나는이 모델 바인딩을 함께 할 수있는 뭔가가 알고 있지만, 다음과 같이 폼 데이터가 설정 될 때 나는 혼란 스러워요 :

<%= Html.TextBox("Line1", Model.Address.Line1)%> 

에 전달되는 모델은 우리가 주소에 고유 한 클라이언트 주소 목록에 있습니다. "Model.Addres.Line1"의 값이 ModelState ModelErrors 컬렉션의 데이터로 대체되는 이유가 확실하지 않습니다. 기본 동작은 오류 컬렉션에서 값을 사용할 때 사용하는 것입니다. 보기에 둘 이상의 양식이 있고 양식이 다른 양식의 각각과 같이 입력 필드에 동일한 이름을 사용하는 경우 이는 문제점입니다.

여기서 HTML 도우미 기능을 사용하고 HTML로 입력을 하드 코딩하는 유일한 방법은 무엇입니까?

답변

0

내가 틀렸다면 정정 해주세요. 그러나 3 개의 주소 모두 같은 양식의 동일한 필드 이름을 갖게됩니다. 그렇다면 유효성 검사 메시지보다 더 큰 문제가 있습니다.

에 관계없이

(별도의 양식을 사용하는 경우에도), 난 당신이 주소 ID와 필드 이름 서문 제안 : 메소드 매개 변수에 (당신은 자동으로 결합 할 수 없습니다

<%= Html.TextBox("Address" + Model.Address.ID + ".Line1", Model.Address.Line1)%> 

을),하지만 당신은 UpdateModel()를 사용할 수 내가 형태 (들)에 HTML 헬퍼 메소드를 치우는에 의해이 문제를 해결

"Address" + Address.ID 
+0

각 주소마다 별도의 양식이 있습니다. 필자가 고유 한 ID로 필드 이름을 시작하면 컨트롤러에서 업데이트 할 모델 바인딩이 손실됩니다. BTW, 유효성 검사 오류가없는 경우 업데이트가 성공적으로 수행됩니다. 오류가 발생할 때만 문제가 발생합니다. – mikerennick

+0

예, 자동 모델 바인딩이 손실됩니다. 그것을 유지하려면 3 개의 모델 바인딩 (둘 중 항상 null이 됨)이 있어야합니다. 바인딩에 대한 접두사 옵션도 있습니다. 또는 두 가지 작업을 수행 할 수 있습니다. a) 제출 된 양식에 대해 validationMessage() 만 표시합니다. 제출되지 않은 주소에 대해서는 validationMessage()를 호출하지 마십시오. 그래도보기가 조금 엉망이 될 것입니다. b) Html.TextBox()는 동일하게 유지하지만 ValidationMessage()에만 접두사를 추가합니다. 컨트롤러에서 무언가를 수행하여 viewstate에서 유효성 검사 오류의 이름을 바꿉니다. 또한 지저분 해. –

0

에 접두사를 설정합니다. 누군가 도우미 방법을 유지하는 방법을 본다면 알려주십시오.

+0

위의 게시물이 솔루션으로 업데이트되었음을 ​​확인했습니다. UpdateModel 메서드의 접두사 옵션을 알지 못했습니다. 감사. – mikerennick

관련 문제