如何在.aspx中调用以前的querystring参数

时间:2010-05-07 11:26:20

标签: asp.net-mvc parameters query-string

假设我有一个具有pageNumber参数和类别参数的ActionResult方法。

用户应该能够将他正在浏览的类别设置为该类别的第一页的ActionLink。但是,如果我有另一个ActionLink,我将转到下一页,category参数将返回默认值。

如何将category参数设置为与上一页相同。

编辑:最初应该是评论,但是会增加

对不起,我看到我的问题不够明确,写得很匆忙。我有点尝试做你正在做的事情,但不是将类别设置为1我不会设置为加载此页面时的参数。

场景:我正在浏览网站并点击“鞋子”(categoryID = 3),其中包含此actionlink <%=Html.ActionLink("Shoes", "Index", new { categoryID = 3 }) %>

我得到鞋子的第一页,然后我不想跳到下一页有动作链接 <%=Html.ActionLink(">>>", "Index", new { page = model.currentPage + 1 }) %> 我不能在此actionlink代码中包含categoryID参数,因为在我的通用视图代码中,我当然不知道哪个类别是活动的。

因此,当我点击它时,它会再次切换到默认类别。

2 个答案:

答案 0 :(得分:0)

听起来您需要将类别ID添加为模型对象的属性,以便在视图中可用。所以你的视图代码看起来像这样:

<%=Html.ActionLink(">>>", "Index", new { categoryId = model.categoryId, page = model.currentPage + 1 }) %>

答案 1 :(得分:0)

我遇到的问题是在调用之间存储参数,因为Page参数与Category参数无关,并且总是单独添加,然后我丢失了另一个的值。例如:

    public ActionResult Products(int? page, int? category)
    {
        var result = repo.GetAllProductsByCategory(category);

        result.Skip(PAGE_SIZE * (page -1)).Take(PAGE_SIZE)

        return View(result);
    }

public ActionResult Products(int? page, int? category) { var result = repo.GetAllProductsByCategory(category); result.Skip(PAGE_SIZE * (page -1)).Take(PAGE_SIZE) return View(result); }

伪代码中的.aspx内部

actionlink ("Shoes", "Products", new { category = 2 }) actionlink ("Pants", "Products", new { category = 3 }) actionlink ("Hats", "Products", new { category = 4 })

"foreach code shows first page"

当我点击下一页时,选择的类别会丢失,因为它只会输入页码的参数。

我自己最终使用Ajax和partialViews来解决这个问题,但我也想到了另一种可能有用的简单方法。只需将控制器中选择的最后一个类别存储为变量即可。像这样:

actionlink ("next page", Products, new { page = lala.nextPage })

    public ActionResult Products(int? page, int? category)
    {
        m_category = category;

        var result = repo.GetAllProductsByCategory(m_category);

        result.Skip(PAGE_SIZE * (page -1)).Take(PAGE_SIZE)

        return View(result);
    }

这样我们就不会忘记用户在翻页时浏览的类别。它仍然需要一些实现,例如如果用户浏览所有产品而不是特定类别(actionlink,其中new category = null),如何再次将其取消。