2013-05-13 5 views
1

내가보기 모델에 바인딩 편집기와 양식을 포함하는 강력한 형식의 MVC보기가 있습니다JQuery와 AJAX : 업데이트 뷰 모델

@model ViewModels.CommentView 
@using (Ajax.BeginForm("UpdateComments", new AjaxOptions { HttpMethod="POST" })) 
{ 
    <fieldset> 
     <legend>Metadata</legend> 
     <div> 
      @Html.HiddenFor(model => model.Id) 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.Comment) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.Comment) 
       @Html.ValidationMessageFor(model => model.Comment) 
      </div> 
     </div> 
     <p class="action clear"> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

을 때의 다른 부분의 요소에 사용자가 클릭 뷰는 JQuery와 AJAX 호출은 서버에서 데이터를 검색하고 제어 업데이트 :

<script type="text/javascript"> 
    $(".load-comments").focus(function() { 
     var Id = $("#Id").val(); 
     var url = "@Url.Action("GetComment")/" + Id; 
     $.ajax({ url: url, success: DataRetrieved, type: 'POST', dataType: 'json' }); 
     function DataRetrieved(data) { 
      if (data) { 
       $("#Comment").val(data.Comment); 
      } 
     }; 
    }); 
</script> 

가 예상대로이 기능은 작동 : 제어 내용을 시각적으로 업데이트됩니다. 그러나 기본 html 요소의 값은 업데이트되지 않으며 양식을 서버에 게시하면 뷰 모델이 비어 있습니다.

JQuery 함수에서 양식 컨트롤 값을 설정하여 서버에 다시 게시하려면 어떻게해야합니까?

+0

HTML 페이지에서 값이 변경된 것을 보시겠습니까? 올바르게 변경되면 요소가 업데이트됩니다. – Kenneth

+0

@Kenneth, 아니요 - 최소한 Firebug 및 마크 업 관리자는 Chrome에서 사용하지 마십시오. 그러나 브라우저에서 해당 페이지를 볼 때 필드 *가 올바르게 업데이트됩니다. –

+0

흠, 아주 이상합니다. 값이 변경되면 개발자 도구에 표시되어야합니다. HttpFiddler와 같은 도구를 사용하여 서버로 보내지는 것을 확인할 수 있습니까? – Kenneth

답변

0

어떻게 HTML을 설정 했습니까? ASP.NET 기본 ModelBinder는 모델을 서버에 다시 빌드하는 데 필요한 객체 속성과 동일한 ID를 찾습니다. 양식 HTML이 개체를 반영하지 않는 것 같습니다. Html 도우미에 의해 생성 된 각 요소를 검사하고 주석 데이터가 요청에서 나온 후에도 각 컨트롤을 같은 것으로 만듭니다. 희망은 당신을 도와주세요! 사용자 정의 ModelBinder를 작성하여 서버에서 모델을 다시 바인딩하려면 여기를 참고하십시오. Model Biding