我正在为 Web 应用程序使用 .NET Core 2“Razor Pages”格式。它允许您使用顶部的简单指令定义如何将 URL 映射到变量名称:
@page "{personId:int?}"
例如,上面的内容将映射 URL/Person/Index/123
to the 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
?
For Asp.Net Core
,当前请求的当前路由值被视为链路生成的环境值。
对于您的情况,123 为personId
将被重新用于<a asp-page="/Person/Details">Details</a>
链接生成。
在此 url 生成过程中,您可以尝试从以下位置删除该值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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)