2011-03-17 2 views
1

하지 않도록하는 방법을 말씀이 올바르게 .. 는 그래서는 강력한 형식의 뷰 모델이 볼 수 있습니다partialview 모델 업데이트 부모보기

class MyViewModel 
{ 
    public string MyName get; set; 
    public string DateOfBirth get; set; 
    public Address MyAddress get; set; 
} 

class Address 
{ 
    public string Street get; set; 
    etc... 
} 

내가 MyViewModel와 inital보기를로드하고있어 및 사용을 주소를로드하기 위해 부분보기를 표시하려면 다음과 같이하십시오 (이렇게하면 주소 입력을 다시 사용할 수 있습니다). 모든 great..and 작동

$.get('/User/DisplayAddress/', {'selection': selection }, function (html) { 

$('#addressBlock').html(html); 

}); 

:

뷰 아래로 다음을 수행하는 아약스 .change 함수를 호출 드롭에 값을 선택에서 사용자 이름의 목록이 포함 된 드롭 다운 목록이 포함되어 있습니다 html이로드됩니다 .. 그러나 viewmodel과 주소는 이제 연결이 끊어졌습니다. 그래서 내 페이지를 제출하면 ViewModel의 MyAddress에 null이 포함됩니다.

mvc2/ajax에서 어떻게 올바르게 수행해야합니까?

내가 사용하는 또 다른 접근법은 '<% RenderPartial("viewname", Model.MyAddress); %> 작동하지만 여전히 json에서 데이터를 반환하고 Java 함수에서 수동으로 필드에 값을 추가해야합니다. -이 작동하지만 .. 매우 성가신 MyAddress 필드는 여러 필드를 포함하고 값을 입력 필드에 추가하는 것은 끔찍한 것처럼 보입니다.

답변

1

부분적으로 HTML을 삽입 할 때 바인딩 문제가 발생했습니다. 부분 뷰가 동일한 네임 스페이스를 따르지 않아서 입력 필드가 상위 뷰 모델에 대한 바인딩을 잃어 버렸습니다.

즉 나의 텍스트 상자는 이제 명명 규칙 MyViewModel.Address.Street 등

내가 HTML과 DIV 용기를 교체하기 위해 JQuery와 접근 방식을 사용 있습니다. 문제는 html을 표시 할 때 바인딩이 망가 졌음을 나타냅니다.

inputmodel과 동일한 것을 사용하기 위해 텍스트 상자의 'name'요소를 설정 했으므로 부분 삽입시 바인딩이 유지됩니다.

이상적으로이 '상속'방식 대신 '평면'보기 모델을 사용하지만이 경우에는 할 수 없었습니다.