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

Posted

技术标签:

【中文标题】如何从 ASP.NET Core 的 Razor 视图中获取 Url 中 id 的值【英文标题】:How to get value of id in Url from Razor View in ASP.NET Core 【发布时间】:2017-06-22 03:43:11 【问题描述】:

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

在我的 Razor 视图 Views/Posts/Create.cshtml 中,我怎样才能获得值“3”以便我可以创建像 <a href="/Blogs/Details/3">« Back to Blog</a> 这样的链接?

到目前为止,使用以下 Tag Helper 创建了链接,但我不知道为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"] 中的Views/Post/Create.cshtml 中的Request.Query["id"] 从Url 中获取它。

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

【问题讨论】:

【参考方案1】:

类似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 核心。 asp.net core中没有RequestContext 第一行是 asp.net 核心,从我的项目中粘贴,但可能无法完全按照您的意愿使用。最后一个链接呢?我没试过,但它应该是 MVC 6。 嘿,我刚试过Context.GetRouteData().Values["id"],它可以工作。你可以编辑你的答案吗?我会将其标记为正确的解决方案。 你也可以使用ViewContext.RouteData.Values["id"] 我使用的是 Asp.net Core 2.0,只有 @MarkG 的解决方案对我有用【参考方案2】:

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

Context.Request.Query["id"]

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

在 ASP.NET Core 3.1 & .NET 5 & .NET 6 这对我有用:

@Context.Request.RouteValues["id"]

【讨论】:

【参考方案6】:

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

@page "myaccount/id"

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

这是我使用的简单 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;
 

【讨论】:

以上是关于如何从 ASP.NET Core 的 Razor 视图中获取 Url 中 id 的值的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET Core Razor 页面获取 DisplayAttribute.Prompt

如何在 ASP.NET Core Razor 页面中绑定复杂列表

在 Razor (chtml) 中渲染动态视图,如何在 asp.net core 3.0 中将 FileProvider 添加到 razor?

如何在 asp.net core .NET6(Razor 页面)中的单个 cshtml 中显示来自多个表/模型的数据

如何使用 asp.net core 2.0 Razor 页面执行下载操作

示例 AJAX 回调到 ASP.NET Core Razor 页面