将值从“部分视图”传递到父视图

时间:2014-11-26 00:30:26

标签: ajax asp.net-mvc partial-views

我正在尝试将无限滚动的分页添加到我的Web应用程序中。我只有一个问题,就是我需要将一个值传递给控制器​​动作方法以获取序列中的下一页。

动作如下:

public ActionResult Index(string nextCursorMark)
{
    if (Request.IsAjaxRequest())
    {
        var page = GetPagedArticles(15, "*:*", nextCursorMark);
        return PartialView("_ArticlesPartial", page);
    }
    else
    {
        var page = GetPagedArticles(30, "*:*");
        return View(page);   
    }
}

page包含我需要传递的字符串。呈现视图时,通过javascript从该视图添加值,这意味着下一个请求(部分)当然是正确获取的。问题是所有后续请求都返回相同的值,因为我无法弄清楚如何传递值(使用MVC或javascript)。

脚本添加到View中(大部分代码省略):

@section scripts {
<script type="text/javascript">
    $(window).scroll(function () {
        if ($(window).scrollTop() == $(document).height() - $(window).height() && !hasData && !inProgress) {
            $.ajax("@Url.Action("Index", "Articles", new { nextCursorMark = Model.CurserMark })", {
              ...
            }});
</script>
}

1 个答案:

答案 0 :(得分:1)

在将Razor发送到视图之前,会在服务器上解析Razor

$.ajax("@Url.Action("Index", "Articles", new { nextCursorMark = Model.CurserMark })"

正在评估'/Articles/Index/#的网址,其中#是第一次加载页面时{是CursorMark初始值。

您需要包含一个可以随每次调用递增的变量

var cursor = '@Model.CursorMark'; // initial value
....
$.ajax('@Url.Action("Index", "Articles")', { newCursorMark: cursor } {
  // update the DOM
  ....
  cursor += someIncrement; // increment the value for the next call
}});