如何将javascript变量传递给@Model函数

时间:2017-06-27 19:14:02

标签: javascript asp.net asp.net-mvc razor asp.net-mvc-5

我目前只是尝试显示从我的控制器方法传入的列表的某些条目,具体取决于用户从分页栏中选择的页面,如下所示

<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);上,我收到错误消息

  

名称&#39;页面&#39;在当前上下文中不存在

我试过的一件事是Javascript variable in razor ActionLink,但这里涉及replace的答案会给我一个&#34; Uncaught Syntax&#34;错误。我想以任何方式使用javascript变量过滤列表,如果可能的话。

1 个答案:

答案 0 :(得分:0)

跳过对剃刀变量进行操作。您不能使用客户端参数进行服务器端计算。

如果您的模型包含所有数据,为什么需要使用剃刀过滤掉数据?将数据分配给JavaScript变量,然后跳过show result方法。

如果要动态加载数据,而不是对该页面执行Ajax调用,并仅使用该数据填充模型。然后再做第二段:)