这是冗长的,但对于你们中的一个知识渊博的小伙子来说应该很容易锻炼。
我有一个带有动态登录链接的 DotNetNuke 网页。如果您未登录,则链接将是“登录”,并具有登录弹出窗口的相应 URL。如果您已登录,则链接将是“注销”,并且同样具有指向处理注销的网页的适当 URL。
当页面确定您是否已登录时,将使用以下属性构建 HTML 链接:onclick="return dnnModal.show('http://blahblah.com....')。
执行此操作的代码:
loginLink.Attributes.Add(" onclick", "return " + UrlUtils.PopUpUrl(loginLink.NavigateUrl, this, PortalSettings, true, false, 200, 550));
不管链接是什么,ID 和 Class 始终保持不变。我的问题是我想用图像替换登录文本,实际上是用于登录和注销的不同图像。这里的问题是,因为 ID 和 Class 保持不变,所以我不能像往常一样通过 CSS 来实现,但我已经能够根据类的属性设置类的样式。我通过找出创建 HTML 链接的输出并根据“href”属性设置类的样式来测试这一点,例如:
a #dnn_dnnLogin_loginLink .LoginLink [href="http://some very very long dynamically created URL.aspx"]{ styles here }
问题在于登录/注销链接会根据您当前所在的页面而变化。
我确实知道这两个渲染选项中的每一个都有一个我可以设置样式的唯一属性,这就是它们的“文本”属性。所以很简单,我如何添加这个属性以在 HTML 中呈现,以便我可以使用 CSS 设置它的样式?
我尝试了几种变体,例如:
loginLink.Attributes.Add(" onclick", "return " + UrlUtils.PopUpUrl(loginLink.NavigateUrl, this, PortalSettings, true, false, 200, 550) " Text", + loginLink.Text);
希望呈现的内容类似于:
onclick="return dnnModal.show('http://localhost/CPD/tabid/87/ctl/Login/Default.aspx?returnurl=%2fCPD.aspx&popUp=true',/*showReturn*/true,200,550,true,'')" Text="Login"
所以我可以风格:
a #dnn_dnnLogin_loginLink .LoginLink [Text="Login"]{styles here}
a #dnn_dnnLogin_loginLink .LoginLink [Text="Logout"]{styles here}
但相反,我得到一个通用错误。我尝试了各种方法来写这行但没有成功,我只是不知道语法。
有人能指出我正确的方向吗?我非常希望我不会叫错树,因为这将是我最初问题的一个非常简单的解决方案。
谢谢,
编辑 - 整个页面的代码是否有帮助?
using System;
using System.Web;
using System.Web.UI;
using DotNetNuke.Common;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Services.Exceptions;
using DotNetNuke.Services.Localization;
using DotNetNuke.UI.Modules;
namespace DotNetNuke.UI.Skins.Controls
{
public partial class Login : SkinObjectBase
{
private const string MyFileName = "Login.ascx";
public string Text { get; set; }
public string CssClass { get; set; }
public string LogoffText { get; set; }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
if (!String.IsNullOrEmpty(CssClass))
{
loginLink.CssClass = CssClass;
}
if (Request.IsAuthenticated)
{
if (!String.IsNullOrEmpty(LogoffText))
{
if (LogoffText.IndexOf("src=") != -1)
{
LogoffText = LogoffText.Replace("src=\"", "src=\"" + PortalSettings.ActiveTab.SkinPath);
}
loginLink.Text = LogoffText;
}
else
{
loginLink.Text = Localization.GetString("Logout", Localization.GetResourceFile(this, MyFileName));
}
loginLink.NavigateUrl = Globals.NavigateURL(PortalSettings.ActiveTab.TabID, "Logoff");
}
else
{
if (!String.IsNullOrEmpty(Text))
{
if (Text.IndexOf("src=") != -1)
{
Text = Text.Replace("src=\"", "src=\"" + PortalSettings.ActiveTab.SkinPath);
}
loginLink.Text = Text;
}
else
{
loginLink.Text = Localization.GetString("Login", Localization.GetResourceFile(this, MyFileName));
}
string returnUrl = HttpContext.Current.Request.RawUrl;
if (returnUrl.IndexOf("?returnurl=") != -1)
{
returnUrl = returnUrl.Substring(0, returnUrl.IndexOf("?returnurl="));
}
returnUrl = HttpUtility.UrlEncode(returnUrl);
loginLink.NavigateUrl = Globals.LoginURL(returnUrl, (Request.QueryString["override"] != null));
if (PortalSettings.EnablePopUps && PortalSettings.LoginTabId == Null.NullInteger)
{
loginLink.Attributes.Add(" onclick", "return " + UrlUtils.PopUpUrl(loginLink.NavigateUrl, this, PortalSettings, true, false, 200, 550));
}
}
}
catch (Exception exc)
{
Exceptions.ProcessModuleLoadException(this, exc);
}
}
}
}