如何从 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">« 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 中显示来自多个表/模型的数据