2017-06-27 33 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页。 –