如何从 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">« 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"]
我有一个简单的 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">« 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"]