Razor Pages:在链接中传递查询参数

use*_*784 3 razor-pages

我在剃须刀页面尝试过:

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

在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);
            }
Run Code Online (Sandbox Code Playgroud)

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

小智 8

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

<a asp-page="Index" asp-route-catId="@cat.Id">@cat.Name</a>
Run Code Online (Sandbox Code Playgroud)

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

OnGet(int catId)
Run Code Online (Sandbox Code Playgroud)

它们将通过查询参数传入。