2012-05-25 6 views
0
)

롤오버 이미지를 테스트 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); 
     } 
    } 
} 

당신은 당신의 마크 업에서 사용할 수 있습니다 :

답변

0

나는 이미지 버튼에 RolloverImage 효과를 달성하기 위해이 하나를 사용하십시오.

은 간단하게 다음과 같이 당신의 Web.config에 대한 참조를 추가 할 수있는 모든 페이지에서 네임 스페이스를 포함하지 않고 컨트롤이 globaly 사용할 수 있도록하려면 : 그런 다음 내에서 정의 된 모든 컨트롤을 사용할 수 있습니다

<system.web> 
    ... 
    <pages theme="..." controlRenderingCompatibilityVersion="..." clientIDMode="..."> 
    <controls> 
     <add tagPrefix="mycontrols" namespace="My.Controls" /> 
    </controls> 
    </pages> 
</system.web> 

. 이 같은 마크 업에서 제어 네임 스페이스 : 당신이 Button 컨트롤로하지 않을 경우

<mycontrols:RolloverImageButton runat="server" ImageUrl="~/Images/image1.png" ImageOverUrl="~/Images/image1_h.png" ... /> 

, 단순히 이미지 클래스가 아닌 ImageButton 클래스를 무시하고 그것을 RolloverImage를 호출합니다. 일반 HyperLink에서 표시 할 수있는 이미지 태그가 있어야합니다.

감사합니다. 제럴드

+0

종합적인 답변 주셔서 감사합니다. 나는 이것을 지금 시험해보고 그에 맞게 코드를 수정할 수 있는지 알아볼 것이다. 이 login.ascx.cs 페이지는 로그인 링크를 돌보기 위해 사이트의 모든 페이지에서 '내재'되어 있으므로 구성을 편집하지 않아도됩니다. – Ryan

+0

방금이 문제가 발생할 수 있다고 생각했습니다. 로그인 링크는 사용자가 로그인했는지 여부에 따라 동적으로 생성됩니다 (로그인 한 경우 "로그 아웃"링크 또는 그 반대로). 따라서 마크 업에는 생성되는 항목이 하나뿐입니다 : – Ryan

+0

Ryan