0

作業中の DotNetNuke のテスト ページにロールオーバー イメージを追加しようとしていますが、正しい構文を取得できないようです (C# にとってはまったく新しいものです)。これは、経験のある人なら誰にとっても簡単なはずです。

これまでにいくつかの異なることを試しましたが、そのほとんどがオブジェクト参照エラーになります。これは私が最後に試したものです (これを配置したコードの下に注意してください。他の属性が追加される場所であるため、行は単にここに移動しました。行を配置するより論理的な場所があると思いますか?):

loginLink.Attributes.Add(" onmouseover", "this.src=(http://localhost/portals/_default/skins/BSAVA/Images/Nav/log_in_link_h.png);");

ページはエラーなしで読み込まれますが、ロールオーバーは機能しません。リンクは次の属性でレンダリングされます。

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);
        }
    }

}
}

私はたくさんの検索を行ってきましたが、JavaScript を使用する方法と使用しない方法がいくつかあるようです。これに関するヘルプは大歓迎です、ありがとう。

4

1 に答える 1

0

これを使用して、[画像]ボタンでRolloverImage効果を実現します。

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);
        }
    }
}

ImageButtonと同じようにマークアップで使用できますが、さらにImageOverUrlを設定することもできます。

すべてのページに名前空間を含めずにControlをグローバルに使用できるようにするには、次のようにweb.configへの参照を追加するだけです。

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

次に、次のように、マークアップのMy.Control名前空間で定義されているすべてのコントロールを使用できます。

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

Buttonコントロールにしたくない場合は、クラスではなくImageクラスをオーバーライドして、ImageButtonそれを呼び出しますRolloverImage。通常のハイパーリンクで表示できる画像タグが必要です。

よろしく、ジェラルド

于 2012-05-25T10:11:30.897 に答える