2012-08-04 2 views
2

MVC3에서 하위 작업을 수행하는 AJAX를 얻는 방법을 찾는 데 어려움을 겪고 있습니다. 하위 동작으로 렌더링 된 섹션이 포함 된보기가 있습니다. 그 자식 동작은 페이지 된 목록이있는 부분 뷰를 렌더링합니다. 사용자가 페이지 목록 호출기에서 다른 페이지 번호를 클릭하면 비디오 목록이 포함 된보기의 병목 부분 만 업데이트되도록해야합니다. MVC3이 AJAX와 작동하는 방식 중 일부에 여전히 혼란 스럽기 때문에 코드를 포함 시켰고 도움을 주시면 감사하겠습니다. 미리 감사드립니다.MVC3 Ajax ChildAction

내보기 :

@model UltimateGameDB.Domain.Entities.Video 
    @{ 
     ViewBag.Title = "Video Home"; 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 
    @using PagedList 
    @using PagedList.Mvc 

    @section MainBanner { 
     <section id="videos-featured"> 
      @Html.Partial("_Video", Model) 

      <div id="videos-featured-detail"> 
       @Html.Partial("_VideoDetail", Model) 

       @Html.Action("MiniFeaturedVideo", "Video") 
      </div> 
     </section> 
    } 

    @Html.Action("RecentVideos", "Video", new { page = ViewBag.page }) 

내 컨트롤러 방법 :

public ActionResult VideoHome(Guid? selectedVideoId, int? page) 
    { 
    var pageIndex = page ?? 1; 
    ViewBag.page = pageIndex; 

    if (selectedVideoId == null) 
    { 
     selectedVideoId = ugdb.Videos.Where(v => v.IsFeatured == true).OrderBy(v => v.Timestamp).FirstOrDefault().VideoID; 
     ViewBag.Autoplay = 0; 
    } 
    else 
    { 
     ViewBag.Autoplay = 1; 
    } 

    return View(ugdb.Videos.Find(selectedVideoId)); 
    } 

    [ChildActionOnly] 
    public ActionResult RecentVideos(int? page) 
    { 
    IQueryable<Video> videoList = ugdb.Videos.OrderBy(v => v.Timestamp); 

    var pageIndex = page ?? 1; 
    var onePageOfVideos = videoList.ToPagedList(pageIndex, 8); 
    ViewBag.OnePageOfVideos = onePageOfVideos; 

    return PartialView("_RecentVideos"); 
    } 

내 부분보기 : 당신은 아마거야 무엇

@using PagedList 
    @using PagedList.Mvc 

    <div id="main-content" class="videos"> 
     <section> 
      <a class="body-title"><span>RECENT VIDEOS</span><span class="title-arrow"></span></a> 
      <div class="main-hr"></div> 
      @foreach (var video in ViewBag.OnePageOfVideos) 
      { 
       <a class="video-entry" href="@Url.Action("VideoHome", "Video", new { selectedVideoId = video.VideoID })"> 
        <img src="http://img.youtube.com/vi/@video.YouTubeID/default.jpg" alt="@video.VideoName" /> 
        <div class="video-details"> 
         <h2>@video.VideoName</h2> 
         <p>@video.VideoType</p> 
        </div> 
       </a> 
      }   
     </section> 
     <div class="pagination"> 
      @Html.PagedListPager((IPagedList)ViewBag.OnePageOfVideos, page => Url.Action("VideoHome", "Video", new { page = page }), PagedListRenderOptions.OnlyShowFivePagesAtATime) 
     </div> 
    </div> 

답변

1

이 원하는이 후 AjaxForm를 삽입입니다 main-content div가 닫히기 전에 main-content div를 끝내십시오.

그러면 PagedListPager은 Ajax 양식이 업데이트되도록 콘텐츠 (예 : 동영상 목록)를 반환하는 컨트롤러의 Json Method에 제출할 수 있습니다.

+0

컨트롤러가이 경우 어떻게 보이는지 알지만보기가 어떻게 보이는지 이해하지 못합니다. 특히 Json Method에 제출하는 PagedListPager는 어떻게 생겼을까요? –

+0

Paged List Pager는 약 한 달 전까지 Ajax를 지원하지 않았습니다. 이 문제를 참조하십시오 : https://github.com/TroyGoode/PagedList/issues/26#issuecomment-6471793 – Romoku

+0

이 문제를 해결할 기회가 많아서이 페이지의 코드 예제가 도움이되었습니다. –

관련 문제