在部分视图上进行分页

时间:2014-01-13 14:46:04

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

我有一个局部视图的主视图。 部分视图允许分页,我正在使用Bootstrap。

控制器:

public ActionResult Main()
{
    return View();
}

//[ChildActionOnly]
public ActionResult _Partial(int page)
{
    Model = //returns records for requested page
    return View(Model);
}

查看:

<ul class="pagination">
    @for (int i = 1; i <= model.TotalPages; i++)
    {
        <li>@Html.ActionLink(i.ToString(), "_Partial", new { page = i, })</li> }
    }
</ul>

我的问题是,虽然分页工作正常,但选择一个页面会直接调用_Partial Action(在我删除[ChildActionOnly]之后 因此,在分页时,它只加载部分视图而没有构成其中一部分的主视图......因此它缺少主视图或任何格式提供的“框架”。

我应该采用不同的方法,还是有办法调用部分行动并采取主要行动?

我想我会喜欢做类似......

<li>@Html.ActionLink(i.ToString(), "Main + _Partial", new { page = i, })</li>

或者我如何才能获得Bootstrap Paging(我不想使用Ajax路由)来处理部分视图?

1 个答案:

答案 0 :(得分:0)

如果您不想使用ajax,则必须返回整个页面。这是一个例子:

控制器:

public ActionResult Main()
{
    return View();
}

public ActionResult SomeAction(int page) //Name this as your like
{
    // I use viewbag here for convenience, 
    //you should consider to create new view model if necessary.
    ViewBag.PageNum = page;

    return View();
}

//[ChildActionOnly]
public ActionResult _Partial(int page)
{
    Model = //returns records for requested page
    return View(Model);
}

查看“SomeAction.cshtml”:

@*Put your Main page content here*@

@Html.Action("SomeAction", "YourControllerName", new { page = ViewBag.PageNum })

@*Put your Main page content here*@

你的分页应改为:

<ul class="pagination">
    @for (int i = 1; i <= model.TotalPages; i++)
    {
        <li>@Html.ActionLink(i.ToString(), "SomeAction", new { page = i, })</li> }
    }
</ul>

请记住,我之所以创建“SomeAction”只是因为我不知道你的“主要”动作到底是做什么的。如果“Main”只是第一页,那么你应该将“SomeAction”和“Main”合并为一个:

public ActionResult Main(int page = 1)
{
    ViewBag.PageNum = page;

    return View();
}