假设我有一个具有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参数,因为在我的通用视图代码中,我当然不知道哪个类别是活动的。
因此,当我点击它时,它会再次切换到默认类别。
答案 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),如何再次将其取消。