如何从 ASP.NET 核心中的 Razor 视图获取 Url 中的 id 值

How to get value of id in Url from Razor View in ASP.NET Core

我有一个简单的 ASP.NET 核心 Web 应用程序,其页面类似于 http://localhost:5050/Posts/Create/3

在我的 Razor 视图 Views/Posts/Create.cshtml 中,我如何才能获得值“3”,以便我可以创建一个 link,如 <a href="/Blogs/Details/3">« Back to Blog</a>

到目前为止,使用以下标签助手创建了 link,但我不知道要为 asp-route-id 添加什么:

<a asp-controller="Blogs" asp-action="Details" asp-route-id="" class="btn btn-default btn pull-right">&laquo; Back</a>

我只是使用默认的 mvc 路由:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

我知道我可以从模型中获取它(即 Model.Blog.BlogId),但我希望在 [=] 中使用 Request.Query["id"] 之类的东西从 Url 中获取它20=].

我试过了asp-route-id="@Context.Request.Query["id"]

类似的东西 Context.GetRouteData().Values["id"]; ?

还有http://www.blakepell.com/how-to-get-the-current-route-in-a-view-with-asp-net-5-mvc-6

目前在 ASP.NET Core 2.1 和 3.1 中有效:

Context.Request.Query["id"]

对于 aspcore 2.1,使用:HttpContextAccessor.HttpContext.Request.Query["id"]

FWIW:我使用@ViewContext.RouteData.Values["yourRouteId"]

看起来在 Asp.Net Core 2.2 中只有语句“@ViewContext.RouteData.Values["id"]”会像这样从 link 中获取 id “https://localhost:44356/Administration/AddUser/0”。 如果你有一个像这样的 url "https://localhost:44356/Administration/AddUser/0?status=False" 并且你想获得 "status" 的值你可以使用 "@Context.Request.Query["status"]"

这是我使用的简单 C# 代码,也适用于 .net 核心和纯 MVC:

 var reqUrl = Request.HttpContext.Request;
 var urlHost = reqUrl.Host;
 var urlPath = reqUrl.Path;
 var urlQueryString= reqUrl.QueryString;
 if (urlQueryString == null)
 {
 ViewBag.URL= urlHost + urlPath;
 }
 else
 {
 ViewBag.URL= urlHost + urlPath + urlQueryString;
 }

使用 [FromRoute] 实现同样的效果。

@page "myaccount/{id}"

@function{
  [FromRoute]
  public string Id {get;set;}
}

在 ASP.NET Core 3.1、.NET 5 和 .NET 6 中这对我有用:

@Context.Request.RouteValues["id"]