- |
+ |
@context.IPAddress |
@if (context.UserId != null)
diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor
index 0ba0dfbe..a74c0d8a 100644
--- a/Oqtane.Client/Modules/Controls/ActionLink.razor
+++ b/Oqtane.Client/Modules/Controls/ActionLink.razor
@@ -1,4 +1,5 @@
@namespace Oqtane.Modules.Controls
+@using System.Net
@inherits LocalizableComponent
@inject IUserService UserService
@@ -71,6 +72,9 @@
[Parameter]
public bool IconOnly { get; set; } // optional - specifies only icon in link
+ [Parameter]
+ public string ReturnUrl { get; set; } // optional - used to set a url to redirect to
+
protected override void OnParametersSet()
{
base.OnParametersSet();
@@ -116,8 +120,12 @@
}
_permissions = (string.IsNullOrEmpty(Permissions)) ? ModuleState.Permissions : Permissions;
- _text = Localize(nameof(Text), _text);
- _url = (ModuleId == -1) ? EditUrl(Action, _parameters) : EditUrl(ModuleId, Action, _parameters);
+ _text = Localize(nameof(Text), _text);
+ if (!string.IsNullOrEmpty(ReturnUrl))
+ {
+ _parameters += ((!string.IsNullOrEmpty(_parameters)) ? "&" : "") + $"returnurl={WebUtility.UrlEncode(ReturnUrl)}";
+ }
+ _url = (ModuleId == -1) ? EditUrl(Action, _parameters) : EditUrl(ModuleId, Action, _parameters);
_authorized = IsAuthorized();
}
diff --git a/Oqtane.Client/Themes/AdminContainer.razor b/Oqtane.Client/Themes/AdminContainer.razor
index 1999a970..7dfbbee1 100644
--- a/Oqtane.Client/Themes/AdminContainer.razor
+++ b/Oqtane.Client/Themes/AdminContainer.razor
@@ -19,9 +19,9 @@
@code {
- private void CloseModal()
- {
- NavigationManager.NavigateTo(NavigateUrl());
+ private void CloseModal()
+ {
+ NavigationManager.NavigateTo((!string.IsNullOrEmpty(PageState.ReturnUrl)) ? PageState.ReturnUrl : NavigateUrl());
}
}
diff --git a/Oqtane.Client/UI/PageState.cs b/Oqtane.Client/UI/PageState.cs
index 46eacd49..a4316e85 100644
--- a/Oqtane.Client/UI/PageState.cs
+++ b/Oqtane.Client/UI/PageState.cs
@@ -20,8 +20,9 @@ namespace Oqtane.UI
public string Action { get; set; }
public bool EditMode { get; set; }
public DateTime LastSyncDate { get; set; }
- public Oqtane.Shared.Runtime Runtime { get; set; }
+ public Shared.Runtime Runtime { get; set; }
public int VisitorId { get; set; }
public string RemoteIPAddress { get; set; }
+ public string ReturnUrl { get; set; }
}
}
diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor
index 8d75dc4f..c3e5dc28 100644
--- a/Oqtane.Client/UI/SiteRouter.razor
+++ b/Oqtane.Client/UI/SiteRouter.razor
@@ -1,4 +1,5 @@
@using System.Diagnostics.CodeAnalysis
+@using System.Net
@namespace Oqtane.UI
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject SiteState SiteState
@@ -85,6 +86,11 @@
int moduleid = (int.TryParse(route.ModuleId, out moduleid)) ? moduleid : -1;
var action = (!string.IsNullOrEmpty(route.Action)) ? route.Action : Constants.DefaultAction;
var querystring = ParseQueryString(route.Query);
+ var returnurl = "";
+ if (querystring.ContainsKey("returnurl"))
+ {
+ returnurl = WebUtility.UrlDecode(querystring["returnurl"]);
+ }
// reload the client application from the server if there is a forced reload or the user navigated to a site with a different alias
if (querystring.ContainsKey("reload") || (!NavigationManager.ToBaseRelativePath(_absoluteUri).ToLower().StartsWith(SiteState.Alias.Path.ToLower()) && !string.IsNullOrEmpty(SiteState.Alias.Path)))
@@ -248,7 +254,8 @@
LastSyncDate = lastsyncdate,
Runtime = runtime,
VisitorId = VisitorId,
- RemoteIPAddress = SiteState.RemoteIPAddress
+ RemoteIPAddress = SiteState.RemoteIPAddress,
+ ReturnUrl = returnurl
};
OnStateChange?.Invoke(_pagestate);
|