У меня есть простой метод действий, в котором перечислены некоторые данные из репозитория. Представление для этого действия использует простой пейджинг. URL можно нажать или ввести как server:port/product/2
, где 2 - номер страницы. Если пользователь вводит номер страницы, который больше, чем количество страниц данных, я хочу сначала перенаправить пользователя на server:port/product/1
и сообщить им, что они были перенаправлены. Отправляющая часть работает, но я не могу найти способ получить значение, переданное методу действия.ASP.NET MVC уведомляет о перенаправлении с JavaScript
EDIT: Я использовал QueryString неправильно в этом вопросе, я действительно хочу, это параметр, переданный методу действия.
ProductController
public ActionResult List(int page =1)
{
ProductsListViewModel model = new ProductsListViewModel();
model.Products = _repository.Products.OrderBy(x => x.ProductId)
.Skip((page -1) * 4)
.Take(4);
model.PagingInfo = new PagingInfo()
{
CurrentPage = page,
ItemsPerPage = 4,
TotalItems = _repository.Products.Count()
};
//this correctly redirects
if (page > model.PagingInfo.TotalPages)
{
return RedirectToAction("List", new { page = 1 });
}
return View(model);
}
JavaScript
var pageParam = "@Request.QueryString["id"]"
var pageTotal = "@Model.PagingInfo.TotalPages";
var pageCurrent ="@Model.PagingInfo.CurrentPage";
console.log('this is the current page: ' + pageCurrent);
console.log(pageTotal);
console.log(pageParam);
function notifyRedirect(pageTotal, pageParam) {
if (pageParam > pageTotal) {
alert('you entered ' + pageParam + ', an invalid page parameter and were redirected');
window.location = '/Product/List/1';
}
}
notifyRedirect(pageTotal,pageParam);
Маршруты
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }
);
При загрузке страницы pageTotal и pageCurrent переменные выводятся на консоль, но я получаю пустую строку при попытке получить значение QueryString. Решив, что, возможно, у меня было имя параметра неправильно, я решил использовать интегральный показатель QueryString и был представлен с ошибкой:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
Как это что http://localhost:49997/product/list/2
, полностью квалифицированное URL по-прежнему дает мне пустое значение QueryString? Как я могу использовать JS для уведомления пользователя о перенаправлении?
'QueryString' является частью URL-адреса, который появляется после"? " и состоит из «&» - разделенных пар «имя = значение» - у вас его нет – Igor
@wootscootinboogie, вы хотите сначала сообщить, а затем перенаправить? или перенаправить сначала, а затем уведомить? Кажется, что ваш javascript делает - уведомлять и перенаправлять, но в вашем вопросе я вижу, что вы предупреждаете, а затем перенаправляете. – ramiramilu
@ramiramilu Я бы хотел перенаправить, а затем уведомить. Я не знаю, чего мне не хватает, но даже с помощью Request ["id"] ничего мне не возвращает. Однако, если я использую Request.Url, я могу увидеть этот параметр как часть URL-адреса, но я не могу его удержать при использовании JS. – wootscootinboogie