2017-06-27 34 views
0

目前,我想要只顯示從我的控制器方法傳入的一個列表,這取決於頁面用戶從分頁欄,它看起來像這樣如何JavaScript變量傳遞到@Model功能

選擇的某些條目
<nav aria-label="Page navigation"> 
    <ul class="pagination"> 
     <li class="page-item"> 
      <a class="page-link" href="#">Previous</a> 
     </li> 
     @for (int i = 1; i <= numberOfPages; i++) 
     { 
      <li class="page-item"> 
       <a class="page-link" href="#" onclick="showResults(@i)">@i</a> 
      </li> 
     } 
     <li class="page-item"> 
      <a class="page-link" href="#">Next</a> 
     </li> 
    </ul> 
    <h4> 
     Retrieved @Model.Count() results - currently showing 10 per page 
    </h4> 
</nav> 

對於某些情況下,numberOfPages是剃刀變量,定義爲Model.Count()/10 + 1。現在我只是試圖從傳入列表中獲取正確的元素。但是,在我的showResults方法中,我無法在涉及@Model的函數中使用javascript變量。

<script> 
    function showResults(page) { 
     //no need to reload the current page 
     if (page == @currentPage){ 
      return; 
     } 
     page = page - 1; //e.g. if user wants to go to page 1, then results gathered would be from 0 to 9 
     var items = @Model.Skip(page * 10).Take(10); 
    } 
</script> 

就行了,var items = @Model.Skip(page * 10).Take(10);,我得到的是說

名稱「頁面」的錯誤不會在目前情況下

有一兩件事我想是從Javascript variable in razor ActionLink存在,但涉及replace的答案會給我一個「未捕獲的語法」錯誤。如果可能的話,我想用任何方法來過濾使用javascript變量的列表。

+1

您似乎無法理解在客戶端上運行的代碼以及服務器上運行的代碼。 'showResults'必須向您的視圖發送ajax調用或重定向,以傳遞新的頁碼。 – GSerg

+0

你試圖做的事是不可能的 - 你不能將JavaScript混合到剃鬚刀的功能,因爲JavaScript是客戶端和剃鬚刀在頁面送達之前編譯,因此你收到的錯誤。 – sleeyuen

回答

0

對剃刀變量執行跳過操作。您不能使用客戶端參數進行服務器端計算。

如果您的模型包含所有數據,您爲什麼需要使用剃刀過濾掉數據?將數據分配給JavaScript變量,並跳過您的顯示結果方法。

如果您想要動態加載數據,而不是爲該頁面進行Ajax調用,並且僅使用該數據填充模型。之後再做第二段:)

+0

假設我在視圖中有整個列表,我能否在沒有Ajax的情況下過濾它?我過濾數據的原因是因爲我想在一個頁面中實現分頁。因此,如果用戶想要查看結果10-19,用戶可以轉到第2頁。 –