首页 > 解决方案 > Razor Pages:在链接中传递查询参数

问题描述

我在剃须刀页面中尝试过:

<div>
    @foreach (var cat in Model.Categories)
     {
        
        <a asp-page="/Index?catId=@cat.Id">@cat.Name</a>
     }
    
</div>

在cs文件中:

public void OnGet()
        {
            CurPage = 1;
            CatId = -1;
            Search = "";
            HasCarousel = false;
            Title = "All Products";
            var queryParams = Request.Query;
            foreach(var qp in queryParams)
            {
                if (qp.Key == "curPage") CurPage = int.Parse(qp.Value);
                if (qp.Key == "catId") CatId = int.Parse(qp.Value);
                if (qp.Key == "search") Search = qp.Value;
                if (qp.Key == "hasCarousel") HasCarousel = bool.Parse(qp.Value);
            }

但是当我单击链接时,地址中没有添加任何查询参数,并且 Request.Query 为空。我究竟做错了什么?或者通过链接将查询参数传递给剃须刀页面的正确方法是什么?

标签: razor-pages

解决方案


要将查询参数添加到您的链接,您可以asp-route-a标签中使用。在你的情况下,它看起来像

<a asp-page="Index" asp-route-catId="@cat.Id">@cat.Name</a>

您还使在 OnGet() 中接收查询参数变得比必须的更难。您可以将参数添加到您的方法签名中,例如

OnGet(int catId)

它们将由查询参数传入。


推荐阅读