In Razor page URLs are generated using Link.To(...). By default calling Link.To() without any parameters returns the base URL of the site. In this case it would be: https://app-dev.2sxc.org/tutorial-razor/.
Link.To(...)
Link.To()
https://app-dev.2sxc.org/tutorial-razor/
The key to retrieving the current page URL is to pass the current page parameters. Link.To(parameters: ...) will then construct the URL based on the passed parameters.Current page parameters are found in CmsContext.Page.Parameters.
Link.To(parameters: ...)
CmsContext.Page.Parameters
@inherits Custom.Hybrid.Razor14 @using ToSic.Razor.Blade @{ var currentPageUrl = Link.To(parameters: CmsContext.Page.Parameters); } <ol> <li> <a href='@Link.To()'>Link to current page <em>without</em> Parameters: @Link.To()</a> </li> <li> <a href='@currentPageUrl'>Link to current page preserving parameters @currentPageUrl</a> </li> </ol>
Because MyPage.Parameters / CmsContext.Page.Parameters follows the query string convention adding a new parameter isn't too difficult. To add a new parameter you can use the .Add(key, value) method or add the parameters as string following the convention as for example &name=2sxc.
MyPage.Parameters
.Add(key, value)
&name=2sxc
See adjusted page parameters: webapi111=page&tut=code-link-parameters-modify&variant=dyn&id=48832&name=2sxc
webapi111=page&tut=code-link-parameters-modify&variant=dyn&id=48832&name=2sxc
Current page URL with new parameter from string: https://2sxc.org/dnn-tutorials/en/razor/webapi111/page/tut/code-link-parameters-modify/variant/dyn/id/48832/name/2sxc
Current page URL with new parameter from .Add(...): https://2sxc.org/dnn-tutorials/en/razor/webapi111/page/tut/code-link-parameters-modify/variant/dyn/id/48832/name/2sxc
.Add(...)
@inherits Custom.Hybrid.Razor14 @using ToSic.Razor.Blade @{ // Example using string var newParamsFromString = CmsContext.Page.Parameters + "&name=2sxc"; // Page parameters using .Add(...) method var newParamsFromAdd = CmsContext.Page.Parameters.Add("name", "2sxc"); } <!-- unimportant stuff, hidden --> <p>Current page URL with new parameter from string: @Link.To(parameters: newParamsFromString)</p> <p>Current page URL with new parameter from <code>.Add(...)</code>: @Link.To(parameters: newParamsFromAdd)</p>
To remove a parameter you can use the .Remove(key) method or modify the string containing parameters.
.Remove(key)
See adjusted page parameters: webapi111=page&tut=code-link-parameters-modify&variant=dyn&id=48832
webapi111=page&tut=code-link-parameters-modify&variant=dyn&id=48832
Current page URL with removed parameter: https://2sxc.org/dnn-tutorials/en/razor/webapi111/page/tut/code-link-parameters-modify/variant/dyn/id/48832
@inherits Custom.Hybrid.Razor14 @using ToSic.Razor.Blade @{ var currentParamsRemoved = CmsContext.Page.Parameters.Remove("basics320"); } <!-- unimportant stuff, hidden --> <p>Current page URL with removed parameter: @Link.To(parameters: currentParamsRemoved)</p>
To change a parameter you can use the .Set(key, value) method or modify the string containing parameters.
.Set(key, value)
See adjusted page parameters: webapi111=page&tut=code-link-parameters-modify&variant=dyn&id=48832&basics320=2sxc
webapi111=page&tut=code-link-parameters-modify&variant=dyn&id=48832&basics320=2sxc
Current page URL with changed parameter: https://2sxc.org/dnn-tutorials/en/razor/webapi111/page/tut/code-link-parameters-modify/variant/dyn/id/48832/basics320/2sxc
@inherits Custom.Hybrid.Razor14 @using ToSic.Razor.Blade @{ var currentParamsChanged = CmsContext.Page.Parameters.Set("basics320", "2sxc"); } <!-- unimportant stuff, hidden --> <p>Current page URL with changed parameter: @Link.To(parameters: currentParamsChanged)</p>