롤오버 이미지를 테스트 DotNetNuke 페이지에 추가하려고합니다. 작동하고 있지만 올바른 구문을 얻을 수없는 것 같습니다 (C#에서는 완전히 새로워졌습니다). 이것은 경험이있는 사람이라면 누구나 쉽게 이해할 수 있어야합니다.간단한 롤오버 이미지 (C#
나는 지금까지 객체 참조 오류를 발생시키는 여러 가지 다른 것들을 시도해 보았습니다. 이것은 내가 시도한 마지막 것입니다 (아래에 코드를 놓았습니다.이 줄은 다른 속성이 추가되는 곳이기 때문에 단순히 여기에 선이 있습니다.이 줄을 추가하는 논리적 인 장소가 있다고 생각합니까?) :
페이지가 오류없이로드되지만 롤오버가 작동하지 않습니다. 링크는 다음 속성으로 렌더링됩니다.
onmouseover="this.src=(http://localhost/portals/_default/skins/BSAVA/Images/Nav/log_in_link_h.png);"
분명히 잘못되었습니다.
전체 페이지 코드는 다음과 같다 : 내가 주변에 검색을 많이 해봤 여러 가지 방법이 일부 사용하여 자바 스크립트 등을하지 돌발 것
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; }
public string login_link_img = "http://localhost/portals/_default/skins/BSAVA/Images/Nav/log_in_link.png";
public string login_link_img_hover = "http://localhost/portals/_default/skins/BSAVA/Images/Nav/log_in_link_h.png";
public string logout_link_img_hover = "http://localhost/portals/_default/skins/BSAVA/Images/Nav/logout_link_h.png";
public string logout_link_img = "http://localhost/portals/_default/skins/BSAVA/Images/Nav/logout_link.png";
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
if (Request.IsAuthenticated)
{
loginLink.CssClass = "logoutLink";
loginLink.ImageUrl = logout_link_img;
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
{
loginLink.CssClass = "loginLink";
loginLink.ImageUrl = login_link_img;
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));
loginLink.Attributes.Add(" onmouseover", "this.src=(http://localhost/portals/_default/skins/BSAVA/Images/Nav/log_in_link_h.png);");
}
}
}
catch (Exception exc)
{
Exceptions.ProcessModuleLoadException(this, exc);
}
}
}
}
. 이 문제에 대한 도움을 주시면 감사하겠습니다. additionaly 그것에 ImageOverUrl을 설정하면하여 ImageButton,하지만 당신이 할 수
이namespace My.Controls
{
/// <summary>
/// Summary description for RolloverImageButton
/// </summary>
[DefaultProperty("Text")]
[ToolboxData("<{0}:RolloverImageButton runat=server></{0}:RolloverImageButton>")]
public class RolloverImageButton : ImageButton
{
[DefaultValue("")]
[UrlProperty]
[Bindable(true)]
public virtual string ImageOverUrl
{
get
{
if (null == ViewState["ImageOverUrl"]) return string.Empty;
else return Convert.ToString(ViewState["ImageOverUrl"]);
}
set { ViewState["ImageOverUrl"] = value; }
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute("onmouseover", "this.src='" + base.ResolveClientUrl(ImageOverUrl) + "'");
writer.AddAttribute("onmouseout", "this.src='" + base.ResolveClientUrl(ImageUrl) + "'");
base.AddAttributesToRender(writer);
}
}
}
당신은 당신의 마크 업에서 사용할 수 있습니다 :
종합적인 답변 주셔서 감사합니다. 나는 이것을 지금 시험해보고 그에 맞게 코드를 수정할 수 있는지 알아볼 것이다. 이 login.ascx.cs 페이지는 로그인 링크를 돌보기 위해 사이트의 모든 페이지에서 '내재'되어 있으므로 구성을 편집하지 않아도됩니다. – Ryan
방금이 문제가 발생할 수 있다고 생각했습니다. 로그인 링크는 사용자가 로그인했는지 여부에 따라 동적으로 생성됩니다 (로그인 한 경우 "로그 아웃"링크 또는 그 반대로). 따라서 마크 업에는 생성되는 항목이 하나뿐입니다 : – Ryan