Как вызвать предыдущий параметр строки запроса в .aspx - PullRequest
1 голос
/ 07 мая 2010

Допустим, у меня есть метод ActionResult, у которого есть параметр pageNumber и параметр категории.

Пользователь должен иметь возможность установить категорию, которую он просматривает, которая будет ActionLink на первую страницу этой категории. Однако, если у меня есть еще одна ссылка ActionLink, где я перехожу на следующую страницу, параметр категории вернется к значению по умолчанию.

Как настроить параметр категории таким же, как на предыдущей странице.

РЕДАКТИРОВАТЬ: Изначально предполагалось, что это комментарий, но его размер увеличивается

Извините, я вижу, что мой вопрос недостаточно ясен, написал его в некоторой спешке. Я пытаюсь сделать то, что вы делаете, но вместо того, чтобы установить категорию в 1, я не хочу, чтобы она была установлена ​​как параметр, который был при загрузке этой страницы.

Сценарий: я просматриваю веб-сайт и нажимаю «обувь» (categoryID = 3), у которой есть эта ссылка действия <%=Html.ActionLink("Shoes", "Index", new { categoryID = 3 }) %>

Я получаю первую страницу обуви, а затем я не хочу переходить к следующей странице, на которой есть ссылка для действий. <%=Html.ActionLink(">>>", "Index", new { page = model.currentPage + 1 }) %> Я не могу включить параметр categoryID в этот код actionlink, потому что в моем коде общего вида я, конечно, не знаю, какая категория активна.

Поэтому, когда я нажимаю, он снова переключается на категорию по умолчанию.

Ответы [ 2 ]

0 голосов
/ 08 мая 2010

У меня была проблема с сохранением параметров между вызовами, так как параметр 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).

0 голосов
/ 07 мая 2010

Похоже, вам нужно добавить идентификатор категории в качестве свойства объекта модели, чтобы он был доступен в представлении.Таким образом, ваш код вида будет выглядеть так:

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