2014-01-27 4 views
4

우선이 말을해야합니다. MVC4를 처음 사용하고이 앱을 개발하고 MVC4를 동시에 학습합니다. :) (가 드롭 다운리스트를 포함)MVC4 : 자식에게 부분 뷰 값을 컨트롤러로 보내시겠습니까?

[code] 
<td id="track">@Html.Partial("_Track",Model)</td><br> 
<td id="tech"> 
<div id="Technologies"> @Html.Partial("_Technology",Model) 
</div></td></tr> 
.. 
[some code] 
.. 

<td class="subtopic"> 
<div class="subtopiclist" id="subque">@Html.Partial("_Subtopics",Model)</div><br> 
<input type="Submit" value="Fetch Interview Questions" name="Fetch" id="Fetch" /> 
      </td> 

부분 뷰 1 :이 앱

는 아래 3 부분 뷰는 버튼 하나가 렌더링되는 상위 뷰이다

@model MvcApplication3.Models.CommonWrapper 

@using (Ajax.BeginForm("SelectTrack", "Home", new AjaxOptions { UpdateTargetId = "Technologies" })) 
{ 
    @Html.DropDownListFor(
      m=>m.SelectedTrackId, 
      new SelectList(Model.track, "TrackId", "TrackName"), 
      string.Empty 
     ) 
} 
    <script type="text/javascript"> 
    $('#SelectedTrackId').change(function() { 
     $(this).parents('form').submit(); 
    }); 
</script> 

Parital View2 (드롭 다운 목록 포함) :

@model MvcApplication3.Models.CommonWrapper 
@if (Model.tech != null && Model.tech.Count() > 0) 
{ 
    using (Ajax.BeginForm("SelectTechnology", "Home", new AjaxOptions { UpdateTargetId = "subque" })) 
    { 
    @Html.HiddenFor(m => m.SelectedTrackId) 
    @Html.DropDownListFor(
      m => m.SelectedTechId, 
      new SelectList(Model.tech, "TechId", "TechName"), 
      string.Empty 
      ) 
    } 
} 

    <script type="text/javascript"> 
    $(document).on('change', '#SelectedTechId', function() { 
     $(this).parents('form').submit(); 
    }); 

</script> 

부분보기 3 (이것은 여러 확인란을 포함) :

@if (Model.subtopic != null && Model.subtopic.Count() > 0) 
{ 
<table> 
@for (int i = 0; i < Model.subtopic.Count; i++) 
{ 
<tr><td> 
    @Html.CheckBoxFor(m => m.subtopic[i].IsSelected, new { id = "subTopic_" + i }) 
    @Html.HiddenFor(m => m.subtopic[i].SubtopicName) 
    @Html.DisplayFor(m => m.subtopic[i].SubtopicName) 
    <td> 
    </tr> 
} 
</table> 

} 

이제 부모 뷰에서, 나는이 세 부분 views.Also의 값을 가져 싶어, 나는 컨트롤러에이 가져온 값을 보내야합니다.
이 작업을 수행하는 방법? 아무도 이걸 좀 도와주세요. 사전에
감사

추가 컨트롤러 코드 :

[HttpPost] 
     public ActionResult SelectTrack(int? selectedTrackId) 
     { 
      CommonWrapper wrapper = new CommonWrapper(); 
      wrapper.tech = new List<TechModel>(); 

      if (selectedTrackId.HasValue) 
      { 
       wrapper.tech = (from s in CommonWrapper.GetTechnology() 
           where s.TrackId == selectedTrackId 
           orderby s.TechName 
           select s).ToList(); 
      } 

      return PartialView("_Technology", wrapper); 

     } 

     [HttpPost] 
     public ActionResult SelectTechnology(int? selectedTechId) 
     { 
      CommonWrapper wrapper = new CommonWrapper(); 
      wrapper.subtopic = new List<SubtopicsModel>(); 

      if (selectedTechId.HasValue) 
      { 
       wrapper.subtopic = (from s in CommonWrapper.GetSubtopics() 
              where s.TechId == selectedTechId 
              orderby s.SubtopicName 
              select s).ToList(); 
      } 

      return PartialView("_Subtopics", wrapper); 

     } 
+0

없음 마법 (단지 다소 가려진)입니다. 간단히 출력 HTML 페이지를 보면 폼과 입력이 어떻게 구조화되는지 알 수 있습니다 (많은 필드가있는 일반적인 단일 폼처럼). ** 하나의 문제는 당신이 부모에서 단일 폼을 원할 때 부분 뷰에 폼을 중첩하는 것입니다. ** 대부분은 배열에 대해 올바르게 인덱싱을 사용함에 따라받은 모델에 '있는 그대로'바인딩됩니다. 컨트롤러 코드를 보여주십시오. –

+0

안녕하세요 TrueBlueAussie 컨트롤러 코드를 추가했습니다. – user3240292

답변

1
을하는 데 도움이 [HttpPost] 컨트롤러 조치에

희망이를 넣어 것

단순히 jquery를 사용하여 원하는 컨트롤러에 게시하도록 ajax 양식을 변경해보십시오. 동작. 그러면 부분 뷰에 업데이트 대상이 필요하지 않습니다.

다른 컨트롤러 동작을 호출하는 각 드롭 다운 목록에이 방법을 적용 할 수 있습니다.

Ajax.BeginForm과 해당 jquery 코드를 제거하고 아래 코드로 대체하십시오. 이것의

부모보기

<script type="text/javascript"> 
    $(function() 
    { 
     $("#SelectedTrackId").change(function() 
     { 
      var selectedValue = $(this).val(); 
      $.ajax(
      { 
       type: "post", 
       data: selectedValue, 
       url: url, 
       success: function (data) 
       { 
        // data contains your partial view 
        $("#some-container-id").html(data); 
       } 
      }); 
     }); 
    }); 
</script> 
+0

다윗에게 도움을 주셔서 대단히 감사합니다. 나는 첫 번째 접근법을 사용하여 시도하고 그것은 나를 위해 일하고있다 :) – user3240292

-1

내가 함께 뷰 모델을 넣어이

기독교

+0

더미 코드 스 니펫을 공유한다면 매우 유용 할 것입니다. – user3240292

관련 문제