2010-03-28 6 views
3

좋아요, 모든 것은 '기능적으로'제가 성취하려고 시도하고있는 것과 함께 작동하고 있습니다. 나는 이것이 바보 같은 것이라고 확신하지만이 일을하는 방법을 알 수는 없습니다..NET MVC Ajax Form - 어떻게 숨길 수 있습니까?

엔티티에 대한 편집 양식이 있습니다. 차를 말할 수 있습니다. 이 '자동차'는 0 - 많은 승객을 가질 수 있습니다. 그래서 편집 양식에는 차에 대한 모든 필드가 있고 각 승객 (부분)을 보여주는 목록보기가 있습니다. 또한 승객을 태울 수있는 새로운 부분 뷰를 렌더링하는 '새 승객 추가'버튼이 있습니다. 여기에는 취소 링크와 Ajax 양식을 제출하기위한 추가 버튼이 있습니다. 승객을 추가하면 승객이 자동으로 목록에 추가되지만, 탈퇴하려면 승객 양식을 작성해야합니다. onSuccess 및 onComplete 함수를 사용하여 양식이있는 div를 숨기려고했으나 둘 다 부분보기 HTML 요소 (흰색 화면, 텍스트) 만 렌더링하고 전체 페이지의 컨텍스트에서 partialView는 렌더링하지 않습니다.

출처 : 1) 메인 편집보기

<script type="text/javascript"> 
    Function hideForm(){ 
     document.getElementById('newPassenger').style.display = 'none'; 
    } 

</script> 
<h2>Edit</h2> 

<%-- The following line works around an ASP.NET compiler warning --%> 
<%= ""%> 

<%Html.RenderPartial("EditCar", Model)%> 
<h2>Passengers for this car</h2> 
<%=Ajax.ActionLink("Add New Passenger", "AddPassenger", New With {.ID = Model.carID}, New AjaxOptions With {.UpdateTargetId = "newPassenger", .InsertionMode = InsertionMode.Replace})%> 
<div id="newPassenger"></div> 
<div id="passengerList"> 
    <%Html.RenderPartial("passengerList", Model.Passengers)%> 
</div> 
<div> 
    <%= Html.ActionLink("Back to List", "Index") %> 
</div> 

2) AddPassenger보기. 아래의 취소 링크는 아무 것도 반환하지 않으므로 div의 정보를 제거합니다.

<% Using Ajax.BeginForm("AddPassengerToCar", New With {.id = ViewData("carID")}, New AjaxOptions With {.OnSuccess = "hideForm()", .UpdateTargetId = "passengerList", .InsertionMode = InsertionMode.Replace})%> 
    <%=Html.DropDownList("Passengers")%> 
    <input type="submit" value="Add" /> 
    <%=Ajax.ActionLink("Cancel", "CancelAddControl", _ 
              New AjaxOptions With {.UpdateTargetId = "newPassenger", .InsertionMode = InsertionMode.Replace})%><% end using %> 

답변

2

Ok - 알아 냈어, 어젯밤에 너무 늦었 어. 그래서, 여기에 답이 있습니다, 실제로 하나의 작은 문제로 밝혀졌습니다.

  1. 함수 hideForm()은 javascript에서 function hideForm()이며 대문자 여야합니다. 컨트롤러 함수를 작성하는 데 너무 익숙하다.
  2. "hideForm"- doh가 아닌 OnSuccess 속성에서 "hideForm()"을 사용하고있었습니다.
  3. 새 승객 추가 링크를 다시 클릭 할 때 div를 숨기지 않으려는 경우 div가 표시되지 않습니다. hideForm 함수를 변경하여 div의 innerHTML 속성을 ''로 설정했습니다.

도움을 청하기 위해 다시 한 번 감사드립니다. 나는 밝혀 졌던 것보다 더 많은 것을 만들려고 노력했습니다.

1

하면 페이지에있는 MicrosoftAjax.jsMicrosoftMvcAjax.js 스크립트 모두를 참조했는지 확인하십시오. 부분보기 내용 (흰색 화면, 텍스트)을 가져 오는 이유는 ajax가 올바르게 실행되지 못하게하는 스크립트 오류 일 수 있습니다. 실행 중에 오류가있는 경우 FireBug을보십시오.

는 지금까지 양식을 숨기고하는 것은 관한 한 당신은 OnSuccess 콜백을 사용할 수

<% Using Ajax.BeginForm("AddPassengerToCar", 
    New With { .id = ViewData("carID")}, 
    New AjaxOptions With { 
     .UpdateTargetId = "passengerList", 
     .InsertionMode = InsertionMode.Replace, 
     .OnSuccess = "hideForm" 
}) %> 

기능은 AJAX 호출이 성공하면 실행됩니다 원하는 사업부를 숨길 자바 스크립트 hideForm.

+0

감사합니다. 나는 적절한 참조를 모두 가지고 있으며 제출 후 양식을 숨길 수있는 것을 제외하고는 모든 것이 잘 작동합니다. 그렇게하면 부분보기의 내용으로 리디렉션됩니다. .OnSuccess를 끝내면 '추가'양식이 계속 표시된다는 점을 제외하고는 훌륭하게 작동합니다. Firebug는 폼 제출 도중 서버에 대한 모든 적절한 POST 호출을 확인합니다. 이것은 숨기고있는 div에있는 호출 함수 (ajax.beginForm)와 관련이 있으며 부분적으로 내용을 렌더링하는 데 필요한 등록 된 JavaScript를 잃어 버릴 수 있습니까? – Tommy

+0

나는 그 정보가 비슷한 문제에 직면 한 다른 사람들에게 도움이 될 것이라고 확신한다. – Tommy

관련 문제