I have a simple ASP.NET Core web application with a page like such http://localhost:5050/Posts/Create/3
.
In my Razor View Views/Posts/Create.cshtml
, how would I be able to get the value "3" so that I can create a link like <a href="/Blogs/Details/3">« Back to Blog</a>
?
So far, created the link using the following Tag Helper, but I don't know what to put for asp-route-id
:
<a asp-controller="Blogs" asp-action="Details" asp-route-id="" class="btn btn-default btn pull-right">« Back</a>
I am just using the default mvc route:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
I know I can get it from the Model (i.e., Model.Blog.BlogId
), but I'm looking to get it from the Url using something like Request.Query["id"]
in Views/Post/Create.cshtml
.
I tried asp-route-id="@Context.Request.Query["id"]
.
Something like that Context.GetRouteData().Values["id"];
?
Also http://www.blakepell.com/how-to-get-the-current-route-in-a-view-with-asp-net-5-mvc-6
Currently in ASP.NET Core 2.1 & 3.1 this works:
Context.Request.Query["id"]
It looks like in Asp.Net Core 2.2 only the statement "@ViewContext.RouteData.Values["id"]" will get the id from a link like this "https://localhost:44356/Administration/AddUser/0".
If you have a url like this one "https://localhost:44356/Administration/AddUser/0?status=False" and you want to get the value of "status" you can use "@Context.Request.Query["status"]"
FWIW: I use @ViewContext.RouteData.Values["yourRouteId"]
For aspcore 2.1, use: HttpContextAccessor.HttpContext.Request.Query["id"]
This what I have used which is simple c# code works with .net core and pure MVC also:
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;
}
use [FromRoute] to achieve the same .
@page "myaccount/{id}"
@function{
[FromRoute]
public string Id {get;set;}
}
in ASP.NET Core 3.1 this works for me:
@Context.Request.RouteValues["id"]