我一直在编写一个模块,用于替换DNN中的注册表单,以便更好地使用我们的系统。我一直在试图弄清楚如何以编程方式获取“登录后重定向”字段的“管理设置”页面上指定的URL。在PortalSettings对象下,我已经能够找到许多不同的TabID属性,但它们似乎都不适用于此字段。我相信我正在寻找的另一个班级,但我不知道在哪里。有没有人遇到这个领域或者更清楚地知道我在哪里?提前谢谢!
答案 0 :(得分:1)
再一次,我在发布后很快就找到了答案。
我在PortalSettings表中找到了“Redirect_AfterRegistration”,可以通过PortalController.GetPortalSettingsDictionary(PortalId)方法访问它。仅此一项是不够的,因为此值可能为-1,因此会将您重定向回同一页面(通常是注册页面)。 \ DesktopModules \ Admin \ Security \ Register.ascx.cs中存在代码,它在注册后提供重定向功能。在7.1.x中,这段代码有一个错误,但经过一些修改我得出了这个:
public string RedirectAfterRegisterUrl
{
get
{
const string key = "Redirect_AfterRegistration";
const string returnUrlKey = "returnurl";
var url = "";
var settings = DotNetNuke.Entities.Portals.PortalController.GetPortalSettingsDictionary(PortalId);
if (settings.ContainsKey(key))
{
var tabId = Convert.ToInt32(settings[key]);
if (tabId > 0)
{
url = DotNetNuke.Common.Globals.NavigateURL(tabId);
}
else
{
if (Request.QueryString[returnUrlKey] != null)
{
url = HttpUtility.UrlDecode(Request.QueryString[returnUrlKey]);
if (url.Contains("//"))
url = "";
if (url.Contains("?returnurl"))
{
string baseURL = url.Substring(0, url.IndexOf("?returnurl", StringComparison.Ordinal));
string returnURL = url.Substring(url.IndexOf("?returnurl", StringComparison.Ordinal) + 11);
url = string.Concat(baseURL, "?returnurl", HttpUtility.UrlEncode(returnURL));
}
}
}
}
return url;
}
}
我的测试表明,这会将我重定向到指定的“注册后重定向”页面。我希望这些解决方案能够帮助其他人!