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.
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
- Link to current page preserving parameters https://kendev.co/2sxc-Apps/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/basics320/page/name/2sxc
Current page URL with new parameter from .Add(...): https://kendev.co/2sxc-Apps/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
@{
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/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 -->