Quantcast
Channel: ASP.NET AJAX + Ajax Control Toolkit (ACT)
Viewing all articles
Browse latest Browse all 5678

Repeater ItemCommand not firing from within ModalPopupExtender

$
0
0

I'm sure this has come up before, but I seem to keep finding the reverse (ModalPopupExtender (MPE) in Repeater), so here goes...

I have a single MPE in my base master page.  I have a image carousel user control that dynamically adds a image gallery editor control to the MPE when an edit link button is clicked.  the editor control has a repeater in it that shows the current list of images, link buttons for each image that move an image left & right (change the display order in the DB) & remove the image (delete from the DB), & a file upload, title textbox, & save button to add a new image.

The MPE works just fine (loads the editor), but when the move, remove, or save (link)buttons are cliked, the page refreshes w/ the MPE showing the editor, but nothing has changed.  when debugging, I can see that the repeater's ItemCommand & the save button's Click events are not being fired.

Here is the master page's HTML w/ the single MPE in it:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="base.master.cs" Inherits="masterpages_base" %><%@ Register TagPrefix="ic" TagName="UserStatus" Src="~/controls/UserStatus.ascx" %><%@ Register TagPrefix="ic" TagName="Footer" Src="~/controls/Footer.ascx" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ic" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><title></title><%-- --%><link type="text/css" rel="Stylesheet" href="../css/reset.css" /><link type="text/css" rel="stylesheet" href="http://fonts.googleapis.com/css?family=Ubuntu:500,regular&amp;subset=latin" media="all" /><link type="text/css" rel="Stylesheet" href="../css/styles.css" /><script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><asp:ContentPlaceHolder id="cphGeneralHead" runat="server" /><%-- --%><link href="../css/blue.monday/jplayer.blue.monday1.css" rel="stylesheet" type="text/css" /><!--<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
    --><script type="text/javascript" src="../js/jquery.jplayer.js"></script><script type="text/javascript">
        //<![CDATA[
        $(document).ready(function () {
            $('#jquery_jplayer_1').jPlayer({
                ready: function (event) {
                    $(this).jPlayer('setMedia', {
                        mp3: 'tracks/<asp:Literal runat="server" id="litTrackFilename" />'
                    });
                },
                swfPath: '../js',
                supplied: 'mp3',
                wmode: 'window',
                preload: 'auto'
            });
        });

        function StopPlayer() {
            $("#jquery_jplayer_1").jPlayer("stop");
        }
        //]]></script><script type="text/javascript">
        function SaveTrack(textboxID, hiddenID) {
            var textbox = document.getElementById(textboxID);
            var hidden = document.getElementById(hiddenID);
            hidden.value = textbox.value;
            alert(hidden.value);
            document.forms[0].submit();
        }</script></head><body><a name="top"></a><form id="form1" runat="server"><%-- --%><asp:ScriptManager ID="ScriptManager1" runat="server" /><asp:Panel runat="server" ID="pnlPageWrapper"><div style="float:left;"><asp:HyperLink runat="server" ID="hypAdminLink" NavigateUrl="~/admin/home.aspx" Text="Admin" /></div><div id="user-status"><ic:UserStatus runat="server" ID="icUserStatus" /></div><div class="clear"><!-- --></div><div id="base-content"><asp:ContentPlaceHolder id="cphGeneral" runat="server" /></div><div id="footer"><ic:Footer runat="server" ID="icFooter" /></div></asp:Panel><%-- --%><asp:Button ID="btnMPEDummy" runat="server" Text="Button" Style="display: none" /><ic:ModalPopupExtender
    ID="mpeContainer"
    runat="server"
    backgroundcssclass="modalBackground"
    Enabled="True"
    TargetControlID="btnMPEDummy"
    PopupControlID="pnlMPE" /><asp:Panel runat="server" ID="pnlMPE" CssClass="modalPopup"><asp:ImageButton runat="server" ID="ibClose" ImageUrl="~/images/ui/player_close.png" OnClick="ibClose_Click" CssClass="close-button" /><div class="clear-bottom-15"><!-- --></div><asp:Panel runat="server" ID="pnlContainer" /></asp:Panel></form></body></html>

Here is the ascx for the ImageLightboxCarousel user control:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ImageLightboxCarousel.ascx.cs" Inherits="controls_ImageLightboxCarousel" %><%@ Reference Control="~/controls/ImageGalleryEditor.ascx" %><script type='text/javascript' language='javascript'>
    tb_pathToImage = '../images/ui/loading-thickbox.gif';

    jQuery(document).ready(function () {
        jQuery('#<asp:Literal runat="server" ID="litCarouselID1" />').jcarousel();
    });</script><div id="image-lightbox-carousel"><asp:LinkButton runat="server" ID="lbEditImageGallery" CssClass="edit-image-gallery" onclick="lbEditImageGallery_Click" ToolTip="Edit Image Gallery" /><div class="clear"><!-- --></div><ul id='<asp:Literal runat="server" ID="litCarouselID2" />' class='jcarousel-skin-ie7'><asp:Repeater runat="server" ID="rptImages" onitemdatabound="rptImages_ItemDataBound" OnItemCommand="rptImages_ItemCommand"><ItemTemplate><li>                <asp:LinkButton runat="server" ID="lbFull"><asp:Image runat="server" ID="imgThumb" Width="95px" Height="67px" /></asp:LinkButton></li></ItemTemplate></asp:Repeater></ul></div>



Here is the cs for the ImageLightboxCarousel user control:

using System;
using System.Web.UI.WebControls;
using System.Collections.Generic;
using AjaxControlToolkit;

public partial class controls_ImageLightboxCarousel : BaseControl
{
    protected controls_ImageGalleryEditor icImageGalleryEditor = new controls_ImageGalleryEditor();

    protected int ViewedUserID
    {
        get
        {
            return String.IsNullOrWhiteSpace(Request.QueryString["uid"])
                ? 0
                : Convert.ToInt32(Request.QueryString["uid"]);
        }
    }

    protected DBUser ViewedUser = null;

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

        if (ViewedUserID < 1)
        {
            Response.Redirect(ResolveUrl("~/Home.aspx"));
        }

        ViewedUser = DBUser.GetUserByID(ViewedUserID);

        if (Session["ShowEditImageGalleryLightbox"] != null)
        {
            try
            {
                bool showEditImageGalleryLightbox = Convert.ToBoolean(Session["ShowEditImageGalleryLightbox"]);
                if (showEditImageGalleryLightbox)
                {
                    ModalPopupExtender mpeContainer = Page.Master.Master.FindControl("mpeContainer") as ModalPopupExtender;
                    Panel pnlContainer = Page.Master.Master.FindControl("pnlContainer") as Panel;
                    pnlContainer.Controls.Clear();

                    icImageGalleryEditor = LoadControl("~/controls/ImageGalleryEditor.ascx") as controls_ImageGalleryEditor;
                    icImageGalleryEditor.ID = "icImageGalleryEditor";
                    pnlContainer.Controls.Add(icImageGalleryEditor);

                    mpeContainer.Show();
                }
            }
            catch (Exception ignored) { }
        }

        return;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        litCarouselID1.Text = "image-gallery-carousel";
        litCarouselID2.Text = "image-gallery-carousel";

        rptImages.DataSource = ViewedUser.Images;
        rptImages.DataBind();

        lbEditImageGallery.Visible = (TheUser.ID == ViewedUserID);

        return;
    }

    protected void rptImages_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;
        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            DBImage image = item.DataItem as DBImage;
            LinkButton lbFull = item.FindControl("lbFull") as LinkButton;
            Image imgThumb = item.FindControl("imgThumb") as Image;

            lbFull.ToolTip = image.Title;
            lbFull.CommandArgument = image.ID.ToString();
            imgThumb.ImageUrl = ResolveUrl(String.Format("~/users/{0}/gallery/thumb/{1}", ViewedUser.ID, image.Filename));
            imgThumb.AlternateText = image.Title;
        }

        return;
    }

    protected void rptImages_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        int id = Convert.ToInt32(e.CommandArgument);
        DBImage item = new DBImage();
        foreach (DBImage image in ViewedUser.Images)
        {
            if (image.ID == id)
            {
                item = image;
            }
        }

        ModalPopupExtender mpeContainer = Page.Master.Master.FindControl("mpeContainer") as ModalPopupExtender;
        Panel pnlContainer = Page.Master.Master.FindControl("pnlContainer") as Panel;
        pnlContainer.Controls.Clear();

        Image imgFullImage = new Image();
        imgFullImage.ImageUrl = ResolveUrl(String.Format("~/users/{0}/gallery/full/{1}", ViewedUser.ID, item.Filename));
        pnlContainer.Controls.Add(imgFullImage);

        mpeContainer.Show();

        return;
    }

    protected void lbEditImageGallery_Click(object sender, EventArgs e)
    {
        ModalPopupExtender mpeContainer = Page.Master.Master.FindControl("mpeContainer") as ModalPopupExtender;
        Panel pnlContainer = Page.Master.Master.FindControl("pnlContainer") as Panel;
        pnlContainer.Controls.Clear();

        icImageGalleryEditor = LoadControl("~/controls/ImageGalleryEditor.ascx") as controls_ImageGalleryEditor;
        icImageGalleryEditor.ID = "icImageGalleryEditor";
        pnlContainer.Controls.Add(icImageGalleryEditor);

        Session["ShowEditImageGalleryLightbox"] = true;
        mpeContainer.Show();

        return;
    }
}

Here is the ascx for the ImageGalleryEditor user control:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ImageGalleryEditor.ascx.cs" Inherits="controls_ImageGalleryEditor" %><div id="image-gallery-editor"><h1>Current Gallery Images</h1><div id="images"><asp:Panel runat="server" ID="pnlContainer"><asp:Repeater runat="server" ID="rptImages" onitemdatabound="rptImages_ItemDataBound" OnItemCommand="rptImages_ItemCommand" EnableViewState="true"><ItemTemplate><div class="item"><div class="move"><asp:LinkButton runat="server" ID="lbMoveLeft" ToolTip="Move Left" CssClass="left" /></div><div class="center"><asp:Image runat="server" ID="imgThumb" CssClass="thumb" /><br /><asp:LinkButton runat="server" ID="lbRemove" ToolTip="Remove" CssClass="remove" /></div><div class="move"><asp:LinkButton runat="server" ID="lbMoveRight" ToolTip="Move right" CssClass="right" /></div><div class="clear"><!-- --></div></div></ItemTemplate></asp:Repeater><div class="clear"><!-- --></div></asp:Panel></div><br /><h1>New Gallery Image</h1><asp:FileUpload runat="server" ID="fuImage" /><br />
    Title: <asp:TextBox runat="server" ID="txtTitle" /><br /><asp:Button runat="server" ID="btnSave" Text="Save" onclick="btnSave_Click" /><br /><asp:Label runat="server" ID="lblMessage" CssClass="message" /></div>

Here is the cs for the ImageGalleryEditor user control:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using AjaxControlToolkit;

public partial class controls_ImageGalleryEditor : BaseControl
{
    protected int ViewedUserID
    {
        get
        {
            return String.IsNullOrWhiteSpace(Request.QueryString["uid"])
                ? 0
                : Convert.ToInt32(Request.QueryString["uid"]);
        }
    }

    protected DBUser ViewedUser = null;

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

        if (ViewedUserID < 1)
        {
            Response.Redirect(ResolveUrl("~/Home.aspx"));
        }

        ViewedUser = DBUser.GetUserByID(ViewedUserID);

        return;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        lblMessage.Text = String.Empty;
        lblMessage.Visible = false;

        pnlContainer.Attributes.Add("style", String.Format("width:{0}px;", ViewedUser.Images.Count * 75 * 2));

        rptImages.DataSource = ViewedUser.Images;
        rptImages.DataBind();

        return;
    }

    protected void rptImages_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;
        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            DBImage image = item.DataItem as DBImage;
            System.Web.UI.WebControls.Image imgThumb = item.FindControl("imgThumb") as System.Web.UI.WebControls.Image;
            LinkButton lbMoveLeft = item.FindControl("lbMoveLeft") as LinkButton;
            LinkButton lbMoveRight = item.FindControl("lbMoveRight") as LinkButton;
            LinkButton lbRemove = item.FindControl("lbRemove") as LinkButton;

            imgThumb.ImageUrl = ResolveUrl(String.Format("~/users/{0}/gallery/thumb/{1}", ViewedUser.ID, image.Filename));
            imgThumb.AlternateText = image.Title;
            imgThumb.ToolTip = image.Title;

            if (item.ItemIndex == 0)
            {
                lbMoveLeft.Visible = false;
            }
            else
            {
                lbMoveLeft.Visible = true;
                lbMoveLeft.CommandName = "left";
                lbMoveLeft.CommandArgument = image.ID.ToString();
            }

            if (item.ItemIndex == (TheUser.Images.Count - 1))
            {
                lbMoveRight.Visible = false;
            }
            else
            {
                lbMoveRight.Visible = true;
                lbMoveRight.CommandName = "right";
                lbMoveRight.CommandArgument = image.ID.ToString();
            }

            lbRemove.CommandName = "remove";
            lbRemove.CommandArgument = image.ID.ToString();
        }

        return;
    }

    protected void rptImages_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string command = e.CommandName.ToLower();
        int imageID = Convert.ToInt32(e.CommandArgument);

        switch (command)
        {
            case "left":
                {
                    ViewedUser.DecreaseImageDisplayOrder(imageID);

                    break;
                }
            case "right":
                {
                    ViewedUser.IncreaseImageDisplayOrder(imageID);

                    break;
                }
            case "remove":
                {
                    DBImage image = DBImage.GetImageByID(imageID);
                    string virtualThumb = String.Format("~/users/{0}/gallery/thumb/{1}", ViewedUser.ID, image.Filename);
                    string virtualFull = String.Format("~/users/{0}/gallery/full/{1}", ViewedUser.ID, image.Filename);
                    string physicalThumb = Server.MapPath(virtualThumb);
                    string physicalFull = Server.MapPath(virtualFull);
                    File.Delete(physicalThumb);
                    File.Delete(physicalFull);

                    ViewedUser.RemoveImage(imageID);
                    
                    break;
                }
        }

        pnlContainer.Attributes.Add("style", String.Format("width:{0}px;", ViewedUser.Images.Count * 75 * 1.9));
        rptImages.DataSource = ViewedUser.Images;
        rptImages.DataBind();

        return;
    }

    protected void btnSave_Click(object sender, EventArgs e)
    {
        string title = txtTitle.Text.Trim();
        if (String.IsNullOrWhiteSpace(title))
        {
            lblMessage.Text = "Gallery image title required";
            lblMessage.Visible = true;
            return;
        }

        if (!fuImage.HasFile)
        {
            lblMessage.Text = "no file provided";
            lblMessage.Visible = true;
            return;
        }

        string filename = fuImage.PostedFile.FileName;
        if ((Path.GetExtension(filename) != ".jpeg") &&
            (Path.GetExtension(filename) != ".jpg"))
        {
            lblMessage.Text = "image must be a JPG/JPEG";
            lblMessage.Visible = true;
            return;
        }

        if (fuImage.PostedFile.ContentLength > 1048576)
        {
            lblMessage.Text = "max file size is 1MB";
            lblMessage.Visible = true;
            return;
        }

        Bitmap full = new Bitmap(fuImage.PostedFile.InputStream);
        if ((full.Width > 800) || (full.Height > 600))
        {
            lblMessage.Text = "image must be at most 800 pixels wide and 600 pixels high";
            lblMessage.Visible = true;
            return;
        }
        else if ((full.Width < 150) || (full.Height < 200))
        {
            lblMessage.Text = "image must be at last 150 pixels wide and 200 pixels high";
            lblMessage.Visible = true;
            return;
        }

        string fullVirtualFilename = String.Format("~/users/{0}/gallery/full/{1}", ViewedUser.ID, filename);
        string fullPhysicalFilename = Server.MapPath(fullVirtualFilename);
        if(File.Exists(fullPhysicalFilename))
        {
            lblMessage.Text = "the image filename already exists";
            lblMessage.Visible = true;
            return;
        }

        string thumbVirtualFilename = String.Format("~/users/{0}/gallery/thumb/{1}", ViewedUser.ID, filename);
        string thumbPhysicalFilename = Server.MapPath(thumbVirtualFilename);
        Bitmap thumb = new Bitmap(95, 67);
        Graphics thumbGraphics = Graphics.FromImage(thumb);
        thumbGraphics.Clear(Color.Transparent);
        thumbGraphics.SmoothingMode = SmoothingMode.AntiAlias;
        thumbGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        int thumbWidth = 0;
        int thumbHeight = 0;
        int left = 0;
        int top = 0;
        if (full.Width == full.Height)
        {
            thumbWidth = 67;
            thumbHeight = 67;
            left = (95 - 67) / 2;
        }
        else if (full.Width < full.Height) // portait
        {
            thumbWidth = 67 * full.Width / full.Height;
            thumbHeight = 67;
            left = (95 - thumbWidth) / 2;
        }
        else // landscape
        {
            thumbWidth = 95;
            thumbHeight = full.Height * 95 / full.Width;
            top = (67 - thumbHeight) / 2;
        }
        try
        {
            thumbGraphics.DrawImage(full, left, top, thumbWidth, thumbHeight);
            fuImage.SaveAs(fullPhysicalFilename);
            thumb.Save(thumbPhysicalFilename, ImageFormat.Png);
            DBImage.Add(ViewedUser.ID, filename, title);
        }
        catch (Exception ignored)
        {
            if (File.Exists(fullPhysicalFilename))
            {
                File.Delete(fullPhysicalFilename);
            }

            if (File.Exists(thumbPhysicalFilename))
            {
                File.Delete(thumbPhysicalFilename);
            }

            lblMessage.Text = "upload error - please try again";
            lblMessage.Visible = true;
            return;
        }

        txtTitle.Text = String.Empty;
        pnlContainer.Attributes.Add("style", String.Format("width:{0}px;", ViewedUser.Images.Count * 75 * 1.9));
        rptImages.DataSource = ViewedUser.Images;
        rptImages.DataBind();

        return;
    }
}



Can someone help me out?

Thanks in advance!

Orion


Viewing all articles
Browse latest Browse all 5678

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>