我正在为Web应用程序使用.NET Core 2“ Razor Pages”格式。它允许您使用顶部的简单指令定义如何将URL映射到变量名称:
@page "{personId:int?}"
例如,上面的方法会将URL /Person/Index/123
映射到IndexModel.OnGetAsync(int personId)
函数,以便personId
的值为123。
但是,我注意到,如果页面上存在链接,这些值似乎会自动添加到可能的任何URL中。如果我将以下内容添加到“索引”页面:
<a asp-page="/Person/Details">Details</a>
…生成的实际HTML是:
<a href="/Person/Details/123">Details</a>
…意味着由于“索引”和“详细信息”页面的顶部都具有相同的指令,因此personId
的值将在它们之间隐式传递。
有什么方法可以防止这种情况发生,以便asp-page="/Person/Details"
可以直接重定向到“详细信息”页面,而无需传递personId
的任何值?
答案 0 :(得分:2)
对于Asp.Net Core
,当前请求的当前路由值被视为用于链接生成的环境值。
对于您的情况,personId
的123将被重新用于<a asp-page="/Person/Details">Details</a>
链接的生成。
在此网址生成过程中,您可以尝试从RouteData
删除值
public async Task OnGetAsync(int? personId)
{
Person = await _context.Person.ToListAsync();
RouteData.Values.Remove("personId");
}
对于另一种更好的方法,您可以尝试从url生成中删除该值。
<a asp-page="/Person/Details" asp-route-personId="">Details</a>