У меня была проблема с сохранением параметров между вызовами, так как параметр Page не был связан с параметром Category и всегда добавлялся отдельно, а затем я терял значение другого. Например здесь:
</p>
<pre><code> 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 })</p>
<p>"foreach code shows first page"</p>
<p>actionlink ("next page", Products, new { page = lala.nextPage })
Здесь, когда я нажимаю на следующую страницу, выбранная категория теряется, потому что она добавляет только параметр для номера страницы.
Я сам, наконец, использовал Ajax и частичные виды, чтобы исправить это, но я также нашел другой простой способ, который, вероятно, сработал бы. Просто сохраните последнюю категорию, выбранную в контроллере, как переменную. Как это:
</p>
<pre><code> 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).