0

モーダル ポップアップで構成可能なページを開く必要がある asp リンクボタンを使用して Web パーツを作成しています。

モーダル ポップアップが開かれますが、すぐに閉じられます。href # を入れましたが、機能しません。

生成されたhtmlを確認すると、次のようになります。

<a id="ctl00_ctl38_g_69332c4e_2a87_4bb4_ad70_f7debbd14e91_LnkButton" onclick="OpenModalPopup('www.google.com', '800', '300' );" href="javascript:__doPostBack('ctl00$ctl38$g_69332c4e_2a87_4bb4_ad70_f7debbd14e91$LnkButton','')">

ascx または webpart ファイル

<script type="text/javascript">
    function OpenModalPopup(pageUrl, widthParameter, heightParameter) {
        var options = { url: pageUrl, width: widthParameter, height: heightParameter, showClose: true };
        SP.SOD.execute('sp.ui.dialog.js', 'SP.UI.ModalDialog.showModalDialog', options);
    }
</script>
<asp:LinkButton CssClass="pwcLinkButton" ID="LnkButton" runat="server" href="#"></asp:LinkButton>

.cs

using System;
using System.ComponentModel;
using System.Web.UI.WebControls.WebParts;

namespace xx.SP.xx.WebParts.VisualWebParts.LinkButton
{
    [ToolboxItemAttribute(false)]
    public partial class LinkButton : WebPart
    {
        private string _LinkText;
        private Uri _Link;
        private Boolean _OpenModal;
        private int _Width;
        private int _Height;

        [WebBrowsable(true), WebDisplayName("LinkText"), WebDescription("Text for the link"),
        Personalizable(PersonalizationScope.Shared), Category("xx- xx"),
        System.ComponentModel.DefaultValue("")]
        public string LinkText
        {
            get { return _LinkText; }
            set { _LinkText = value; }
        }

        [WebBrowsable(true), WebDisplayName("Link"), WebDescription("Link"),
        Personalizable(PersonalizationScope.Shared), Category("xx- xx"),
        System.ComponentModel.DefaultValue("")]
        public Uri Link
        {
            get { return _Link; }
            set { _Link = value; }
        }

        [WebBrowsable(true), WebDisplayName("OpenModal"), WebDescription("OpenModal"),
        Personalizable(PersonalizationScope.Shared), Category("xx - xx"),
        System.ComponentModel.DefaultValue("")]
        public Boolean OpenModal
        {
            get { return _OpenModal; }
            set { _OpenModal = value; }
        }

        [WebBrowsable(true), WebDisplayName("Width"), WebDescription("Width"),
        Personalizable(PersonalizationScope.Shared), Category("xx- xx"),
        System.ComponentModel.DefaultValue("")]
        public int WidthPopup
        {
            get { return _Width; }
            set { _Width = value; }
        }

        [WebBrowsable(true), WebDisplayName("Height"), WebDescription("Height"),
       Personalizable(PersonalizationScope.Shared), Category("xx- xx"),
       System.ComponentModel.DefaultValue("")]
        public int HeightPopup
        {
            get { return _Height; }
            set { _Height = value; }
        }

        // Uncomment the following SecurityPermission attribute only when doing Performance Profiling on a farm solution
        // using the Instrumentation method, and then remove the SecurityPermission attribute when the code is ready
        // for production. Because the SecurityPermission attribute bypasses the security check for callers of
        // your constructor, it's not recommended for production purposes.
        // [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Assert, UnmanagedCode = true)]
        public LinkButton()
        {
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            InitializeControl();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (LnkButton != null && Link !=null && LinkText != null)
            {
                LnkButton.Text = LinkText;
                if (OpenModal)
                {
                    LnkButton.Attributes.Add("onclick", "OpenModalPopup('" + Link.ToString() + "', '" + WidthPopup.ToString() + "', '" + HeightPopup.ToString() + "' );");
                }
                else
                {
                    LnkButton.Attributes.Remove("onclick");
                    LnkButton.PostBackUrl = Link.ToString();
                }
            }
        }
    }
}
4

2 に答える 2

2

コードを次のように変更し、それが役立つかどうかを確認します。

LnkButton.Attributes.Add("onclick", "OpenModalPopup('" + Link.ToString() + "', '" + WidthPopup.ToString() + "', '" + HeightPopup.ToString() + "' ); return false;");
于 2013-05-17T09:24:09.703 に答える
0

閉じられているのはポップアップではないようですが、リンクによってポストバックが発生するため、ページが更新されます。リンクの onclick 処理関数が false を返す場合、ブラウザはリンクのクリックをキャンセルすると解釈するため、ポストバックは発生しません。したがって、この1行を次のように変更します。

LnkButton.Attributes.Add("onclick", "OpenModalPopup('" + Link.ToString() + "', '" + WidthPopup.ToString() + "', '" + HeightPopup.ToString() + "' ); return false;");

トリックを行う必要があります。

于 2013-05-17T09:31:05.687 に答える