2017-01-23 5 views
2

여러 섹션이있는보기가 있습니다. 부분 뷰와 아약스를 사용하여 개별적으로 섹션을 업데이트하고 싶습니다.ajax MVC를 사용하여 복잡한 객체 전달

지금까지이 있습니다

컨트롤러 :

[HttpPost] 
public PartialViewResult userdetailssettings(UserDetails model) 
{ .... } 

보기 HTML :

<div id="userDetailsPartial"> 
    @Html.Partial("_user_details", Model.userdetails)   
</div> 

부분 HTML :보기에

<div class="form-group"> 
    <div class="col-md-12"> 
     @Html.TextBoxFor(x => x.Forename, new { @class = "form-control", placeholder = "Enter your forename" }) 
     @Html.ValidationMessageFor(x => x.Forename) 
    </div> 
</div> 
<div class="form-group"> 
    <div class="col-md-12"> 
     @Html.TextBoxFor(x => x.Surname, new { @class = "form-control", placeholder = "Enter your surname" }) 
     @Html.ValidationMessageFor(x => x.Surname) 
    </div> 
</div> 

자바 스크립트 :

모델이 아약스에 의해 컨트롤러로 전달되지만 값은 입력 값이 아닙니다. 뷰를 열기 위해 컨트롤러에서 전달 된 원래 값입니다.

태그에서 부분적으로 줄 바꿈을 시도하고 부분 내에 양식 태그를 추가하려고했습니다. 나는 또한이 코드를 넣어 시도

: 클릭 기능 내부

var detailsUrl = "@Url.Action("userdetailssettings", "UserLogin")"; 
var detailsmodel = JSON.stringify(@Html.Raw(Json.Encode(@Model.userdetails))); 

.

업데이트 된 값을 입력으로 전달하지 않습니다.

내가 자바 스크립트 즉

var detailsmodel = [ { Forename: $('#Forename').val(), Surname: $('#Surname').val() } ]; 

에 입력에서 모델의 새로운 인스턴스를 만드는 생각하지만 난 그냥 JSON을 생성하고 있다면 왜 그냥 JSON으로 바인딩 모델을 변환 할 수 없습니다.

+0

* "왜 MVC가 아닌 MVC를 사용하기 때문에 바인딩 된 모델을 json으로 변환 할 수 있습니까?" "바운드 모델"은 컨트롤러에서 모델을 통한 뷰까지의 한 가지 방법입니다. "바운드 모델"이라는 용어를 "모델"과 "바인딩"으로 혼합합니다. 양식을 POST하면 모델을 얻을 수 있지만 아약스를 통해 전달하는 경우 양식의 현재 값을 가져와야합니다 ('입력에서 모델의 새 인스턴스 작성'과 같이). 당신의'var detailsmodel = JSON.stringify ... '는 뷰가 생성되고 변경되지 않을 때 설정됩니다. –

+0

설명해 주셔서 감사합니다. 나는 모델의 새로운 인스턴스를 만들기 위해 삼킬 것이다. 당신이 당신의 코멘트를 대답한다면 나는 받아 들일 것입니다. 다시 한번 감사드립니다. –

답변

3

왜 난 그냥 바인딩 모델을 사용하면, MVVM을 MVC를하지 사용하고 있기 때문입니다

JSON으로 변환 할 수 없습니다.

"바운드 모델"은 컨트롤러에서 모델을 통한보기까지의 한 방법입니다. "바인딩 된 모델"이라는 용어를 "모델"및 "바인딩"과 혼합 할 가능성이 있습니다.

양식을 POST하는 경우 액션 매개 변수를 기반으로 모델을 가져 오지만 아약스를 통해 전달하는 경우 양식의 현재 값을 가져와야합니다 (예 : 코멘트 '입력으로부터 모델의 새로운 인스턴스를 생성'). 오히려 모든 수동 입력을 추가하는 대신

var data = $("form").serialize(); 

:

당신과 같은 다양한 방법으로 AJAX로 전달하는 데이터를 생성 할 수있다.

var detailsmodel = JSON.stringify...은보기가 생성 될 때 설정되며 MVC를 사용하여 자동으로 변경되지 않습니다.

1

전달하는 데이터가 @Html.Raw(Json.Encode(@Model.userdetails))을 기준으로 페이지로드시 정적으로 설정 되었기 때문입니다.

$form.serialize()과 같은 것을 사용하거나 페이지의 실제 입력란에서 게시물 본문을 만들어야합니다.