Preserve URL parameters
Create a link to the same page
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://kendev.co/2sxc-Apps/2sxc-Tutorial
.
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 current page with all Parameters
- Link to current page without Parameters: https://kendev.co/2sxc-Apps/2sxc-Tutorial
- Link to current page preserving parameters https://kendev.co/2sxc-Apps/2sxc-Tutorial/basics320/page
@{ var currentPageUrl = Link.To(parameters: CmsContext.Page.Parameters); }
<ol>
<li><a href='@Link.To()'>Link to current page without Parameters: @Link.To()</a></li>
<li><a href='@currentPageUrl'>Link to current page preserving parameters @currentPageUrl</a></li>
</ol>
Add Parameters
Because 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
.
See current page parameters: basics320=page
See adjusted page parameters: basics320=page&name=2sxc
Current page URL with new parameter from string: https://kendev.co/2sxc-Apps/2sxc-Tutorial/basics320/page/name/2sxc
Current page URL with new parameter from .Add(...)
: https://kendev.co/2sxc-Apps/2sxc-Tutorial/basics320/page/name/2sxc
@{
// 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>
Remove Parameters
To remove a parameter you can use the .Remove(key)
method or modify the string containing parameters.
See current page parameters: basics320=page
See adjusted page parameters:
Current page URL with removed parameter: https://kendev.co/2sxc-Apps/2sxc-Tutorial
@{
var currentParamsRemoved = CmsContext.Page.Parameters.Remove("basics320");
}
<!-- unimportant stuff, hidden -->
<p>Current page URL with removed parameter: @Link.To(parameters: currentParamsRemoved)</p>
Change Parameters
To change a parameter you can use the .Set(key, value)
method or modify the string containing parameters.
See current page parameters: basics320=page
See adjusted page parameters: basics320=2sxc
Current page URL with changed parameter: https://kendev.co/2sxc-Apps/2sxc-Tutorial/basics320/2sxc
@{
var currentParamsChanged = CmsContext.Page.Parameters.Set("basics320", "2sxc");
}
<!-- unimportant stuff, hidden -->
<p>Current page URL with changed parameter: @Link.To(parameters: currentParamsChanged)</p>
@inherits Custom.Hybrid.Razor14
<!-- unimportant stuff, hidden -->
@{ var currentPageUrl = Link.To(parameters: CmsContext.Page.Parameters); }
<ol>
<li><a href='@Link.To()'>Link to current page without Parameters: @Link.To()</a></li>
<li><a href='@currentPageUrl'>Link to current page preserving parameters @currentPageUrl</a></li>
</ol>
<!-- unimportant stuff, hidden -->
<p>See current page parameters: <code>@CmsContext.Page.Parameters</code></p>
@{
// 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>
<!-- unimportant stuff, hidden -->
<p>See current page parameters: <code>@CmsContext.Page.Parameters</code></p>
@{
var currentParamsRemoved = CmsContext.Page.Parameters.Remove("basics320");
}
<!-- unimportant stuff, hidden -->
<p>Current page URL with removed parameter: @Link.To(parameters: currentParamsRemoved)</p>
<!-- unimportant stuff, hidden -->
<p>See current page parameters: <code>@CmsContext.Page.Parameters</code></p>
@{
var currentParamsChanged = CmsContext.Page.Parameters.Set("basics320", "2sxc");
}
<!-- unimportant stuff, hidden -->
<p>Current page URL with changed parameter: @Link.To(parameters: currentParamsChanged)</p>
<!-- unimportant stuff, hidden -->