2011-09-07 84 views
0

我希望我能得到這個一些想法改變視圖模型屬性:未做頁閃光燈

林試圖創建一個進出口工作在網站上的「查看更多結果」功能。目前,有10個項目的列表正在使用剃刀語法顯示。

@foreach (Movie m in Model.MovieList) 
{ 
    <li> 
     @Html.RouteLink("Details", "Details", new { detailsId = m.Id }, new { @class = "hidden double-click-href" }) 
     <h1> 
     @(m.CurrentIdentifier): @m.MovieTitle 
     <span class="right">@m.Movie.Description</span> 
     </h1> 
     <div class="fields"> 
      <span class="label">Release Date</span> 
      <span class="value">@m.CreatedOn.ToShortDateString()</span> 
      <span class="label">Genre</span> 
      <span class="value">@m.Genre.Name</span> 
     </div> 
    </li> 
} 

有一個鏈接「顯示更多結果」,單擊時,將通過查詢將下10個個案附加到列表中。我能想到的唯一方法就是創建一個使用JQuery的ajax調用,它將調用一個動作,返回JSON結果和我需要的信息,然後填充一個字符串,該字符串是HTML的「模板」(重複)以上使用JavaScript方法。

問題是,我不喜歡HTML基本上被複制的事實,如果我試圖在調用動作期間填寫MovieList屬性(我需要使它成爲ajax或類似的東西,以便存在沒有「閃爍」),直到頁面刷新纔會被拾取。

是否有一個很好的方法來設置MovieList屬性,以便我不必重複HTML並仍然進行ajax調用(不是頁面回發)?

編輯:

我試圖@Jamie迪克森的建議,而我看到的要求,我可以看到正在返回正確的HTML,它沒有更新頁面(頁面停留完全與之前我點擊鏈接相同)。這裏是JavaScript:

function GetMovieList() { 
    var url = location.pathname + '/Filter'; 
    var size = $('#my-movie-list > li').size(); 

    $.ajax({ 
     type: "GET", 
     url: url, 
     data: { fromNumber: size }, //the number of rows already displayed 
     contentType: "application/x-www-form-urlencoded", 
     success: function (data) { 
     SetShowMoreResultsFeatures(); //checks to see if the 'Show More Results' link should be disabled and some other stuff. 
     } 
    }); 
    } 

這裏是控制器的方法:

[Route("/Filter")] 
public ActionResult GetFilteredMovies(int fromNumber) 
{ 
    ViewData.Model = new DashboardIndexViewModel 
    { 
    CurrentUser = CurrentUser.User, 
    MyCalendar = new CalendarListView(CurrentUser.User), 
    CaseCount = movieQuery.Execute(CurrentUser.User.Id).Count(), 
    Movies= GetMovies(fromNumber) 
    }; 


    return View("_MovieItem", ViewData.Model); 
} 

,這裏是局部視圖 「_MovieItem」:

@model Matrix.Investigator.Website.ViewModels.Dashboard.DashboardIndexViewModel 

@foreach (Movie m in Model.MovieList) 
{ 
    <li> 
     @Html.RouteLink("Details", "Details", new { detailsId = m.Id }, new { @class = "hidden double-click-href" }) 
     <h1> 
     @(m.CurrentIdentifier): @m.MovieTitle 
     <span class="right">@m.Movie.Description</span> 
     </h1> 
     <div class="fields"> 
      <span class="label">Release Date</span> 
      <span class="value">@m.CreatedOn.ToShortDateString()</span> 
      <span class="label">Genre</span> 
      <span class="value">@m.Genre.Name</span> 
     </div> 
    </li> 
} 

回答

2

把你的HTML中的部分觀點,迭代集合以輸出其HTML。

當您對控制器方法進行ajax調用時,讓控制器返回相同的局部視圖並將它傳遞給您的新集合。

然後,您可以簡單地將返回的HTML數據放入頁面的相關部分,並且不會有重複。

+0

我更新了所有內容,雖然我可以看到正在創建的正確html,並且從請求中返回,但它並沒有更新頁面,所以我繼續看到前10個電影,而不是我點擊鏈接後應該看到的20個電影。我究竟做錯了什麼?爲了讓您知道,「索引」是部分視圖在頁面初始加載時被調用的視圖的名稱。任何其他想法? –

+0

成功處理程序觸發時,數據變量中的內容是什麼? –

+0

你的方法SetShowMoreResultsFeatures(),這是如何從你的ajax調用中獲取數據的?這個函數裏面發生了什麼?我猜你需要將數據傳遞給它? –